Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2017, 13:29   #1
Google0_0
Пользователь
 
Регистрация: 05.08.2012
Сообщений: 17
По умолчанию Абстрактные классы и методы

Доброго времени суток.
По ходу изучения Java SE по книге Брюса Эккеля "Философия Java" впервые встретилось задание суть которого не совсем ясна. Задание встретилось в главе "интерфейсы", раздел "абстрактные классы и методы".

Полный текст задания: создайте абстрактный (abstract) класс без методов. Произведите от него класс и добавьте метод. Создайте статический (static) метод, получающий ссылку на базовый класс, проведите нисходящее преобразование к производному типу и вызовите его методы. Продемонстрируйте, что такой способ работает в методе main(). Теперь поместите в определение метода из базового класса ключевое слово abstract, и необходимость в нисходящем преобразовании исчезнет.

Вопрос вызывает формулировка "создайте статический (static) метод, получающий ссылку на базовый класс". Если я правильно понимаю, то требуется что-то вроде этого:
Код:

import static MyPack.Print.*;

abstract class A{}

class B extends A {
	void f() { println("B.f() "); }
	static void g(A a){
		((B)a).f(); 
	}
}

public class Main {
	public static void main(String[] args) {
		B b = new B();
		b.g(new A());
	}
}
Но разумеется компилятор выдаёт "error: A is abstract; cannot be instantiated" относительно строчки "b.g(new A());". Что вроде бы логично, так как мы не можем создавать объекты абстрактных классов. Но что тогда подразумевается под формулировкой "создайте статический (static) метод, получающий ссылку на базовый класс"?
Google0_0 вне форума Ответить с цитированием
Старый 21.10.2017, 13:47   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
A a = new B();
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Абстрактные Классы C++ EnJoYs Помощь студентам 1 09.01.2017 10:13
Абстрактные классы Vadik(R) Visual C++ 2 23.02.2014 01:56
Абстрактные классы aaayyy HTML и CSS 2 02.07.2012 09:54
Абстрактные классы KuckaMAXHATKA Общие вопросы C/C++ 1 13.12.2011 23:29
С++ Абстрактные классы Jane-sad Помощь студентам 2 14.10.2010 14:19