Возможно ли привести метод?

#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 . Это просто то, как работает полиморфизм.