Сигнатура Java-метода игнорирует неравный возврат класса - PullRequest
0 голосов
/ 03 сентября 2018

Хорошо, я пытаюсь выполнить это:

public class A
{
}
public class B extends A
{
}
public class UseAandB {
  public static B from() {return new B();}
  public static A from() {return new A();}
}

Но я не могу выполнить это, потому что B расширяет A. Почему это не работает? И как я могу это исправить?

РЕДАКТИРОВАТЬ: Мое первое предположение кажется неправильным, возвращаемая сигнатура метода не является частью официальной сигнатуры метода, снова java терпит неудачу на каждом уровне логики. Спасибо Энди Тернер

1 Ответ

0 голосов
/ 03 сентября 2018

Но я не могу выполнить это, потому что B расширяет A

Нет, вы не можете скомпилировать это, потому что у вас есть два переопределенных метода в одном классе . Это не сработает, если вы измените один из методов для возврата, скажем, String.

Тип возвращаемого значения не является частью сигнатуры метода в Java, поэтому вы не можете определить два метода, которые отличаются только типом возвращаемого значения.

Самое простое решение - переименовать хотя бы один из методов, например, fromB и fromA. Или же поместите методы в отдельные классы.

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

...