Есть родительский класс,который является абстракцией при создании экземпляров дочерних классов. Как можно с инстанса родителя, получить доступ к методам дочернего класса?
class A {
//some code
}
class B extends A {
private int i = 10;
public void go() {
//some code
}
}
Main class:
A a = new B();
a.go();//error
Привести тип переменной к дочернему классу:
A a = new B();
((B) a).go();
Проблема в том, что переменная может хранить объект класса A
и других его наследников, у которых метода go
не будет. Поэтому может потребоваться сначала проверить содержит ли переменная объект нужного класса:
if(a instanceof B) {
B b = (B) a;
b.go();
}
А вообще сам факт того что Вам понадобилось приведение типов это повод задуматься и поработать над логикой кода. Почему переменная объявлена с типом A
? Всегда ли там будет объект класса B
? Не нужно ли перенести метод в родительский класс? Не лучше ли создать метод в A
и переопределить его поведение в B
?
Если все дочерние классы имеют такой метод то можно задекларировать его в базовом классе.
abstract class A {
public abstract void go();
}
Если в классе A нет метода, то вызвать из него метод другого класса нельзя. Но если добавить метод с такой же сигнатурой и возвращаемым значением в класс A, то в B этот метод будет перекрыт, и следовательно вызываться благодаря полиморфизму. Метод и класс A можно сделать абстрактным, если нет общей имплементации по умолчанию для подклассов, и следовательно подклассам придётся писать свою имплеметацию. Если класс А не абстрактный, но содержит метод, который перекрыт в подклассе, то вызов метода будет происходить из подкласса, благодаря тому же полиморфизму, но подклассы в этом случае не обязаны имплементировать или перекрывать общий метод, который будет иметь имплементацию по умолчанию.
Для более лучшего понимания абстрактных классов можно почитать этот ответ.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Реализую телеграм бота для парсингаПрокси работает, бот отвечает на слова, а вот парсинг работает не как ожидается и не выводит на экран почему?
Сделал два эксперимента с использованием javaFx и Swing где оба этих проекта заворачиваю в банку (Eclipse)первым экспортировал Swing проект по двойному...
У меня есть формы и все они работают через onsubmit с одним и тем же скриптом На одну из форм мне нужно было сделать так, что бы при нажатии на кнопку,...