#java #polymorphism
#java #полиморфизм
Вопрос:
Добрый вечер,
я просто спросил себя, возможно ли привести метод.
public class A{
public void A_method() {
System.out.println("THIS is A Class --> A_method");
}
}
public class B extends A{
@Override
public void A_method() {
System.out.println("THIS is B Class --> A_method");
}
}
public class Main {
public static void main(String[] args){
A a = new A();
a.A_method();
}
}
Вывод: «ЭТО класс -> A_method».
Я попытался использовать его следующим образом:
((B)a.A_method());
Он должен напечатать: ЭТО класс B —> A_method
но он не работает. Возможно ли использовать методы, подобные этому?
Спасибо
Комментарии:
1. Я думаю, вы хотите привести суперкласс к подклассу, а не к методам.
2. Нет, невозможно «использовать» методы… предоставленный вами синтаксис
((B)a.A_method());
пытается привести результатA_method()
(который является недействительным) кB
ссылке на класс.. Возможно, вам потребуется больше изучить разницу между ссылками и объектами в Java
Ответ №1:
Невозможно привести методы, приведение работает только с типами (объектами и примитивами).
Если вы хотите вызвать метод, переопределенный в подклассе B
, то вам нужно, чтобы объект, для которого вызывается метод, имел тип B
:
A a = new B(); // the declaration type can be A but the object is a B
или
B b = new B();
Другого способа нет: пока тип среды выполнения не B
указан, он никогда не вызовет переопределенный метод B
. Это просто то, как работает полиморфизм.