Как можно сделать полиморфизм с подклассом в суперклассе? - PullRequest
1 голос
/ 15 мая 2019

Здравствуйте, у меня есть следующие классы

class A <T extends AnotherClass>{
     public static A getA(){
          return new A();
     }
}
class B<T> extends A{}
class C<T> extends A{}

И я пытаюсь сделать полиморфизм следующим образом:

B b = A.getA();

Но я получаю следующую ошибку:

Найдены несовместимые типы реквизитов B A.

Как я могу это сделать?

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

можно сделать A b = new B(); но не наоборот, как вы пытаетесь сделать.
По сути, вы можете поместить только подкласс в супер , но не супер в подкласс .

2 голосов
/ 15 мая 2019

Не может работать . Полиморфизм статических методов отсутствует.Они существуют только в контексте декларирующего класса.Таким образом, getA будет возвращать Aways экземпляр A в вашем случае, и он никогда не будет B.

Вы еще не объявили, какой тип A будет с точки зрения обобщений, но это менее важно.

In this sense 
B b = A.getA(); is nonsense , because new A() will never be B.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...