Почему вывод в последнем ряду "Wuff Ringding"?а не "рингдинг рингдинг"? - PullRequest
0 голосов
/ 19 января 2019

Эй, ребята, вы можете мне помочь с моим кодом.Это о полиморфизме.У меня есть только вопрос о последнем ряду основной функции.Где там вывод "Уфф Рингдинг", а не "Рингдинг Рингдинг"?

public class Hund{
public Hund (){
}
public String belllen(){
return "Wuff";
}
public String spielen(Hund h){
return "Wuff" + h.bellen();
}
}

public class Fuchs extends Hund{
public Fuchs (){
}
public String bellen(){
return "Ringding";
}
public String spielen(Fuchs f){
return "Ringding" + f.bellen();
}
}

public class Park {
public static void main (Strin[] args){
Hund bello = new Hund();
Fuchs foxi = new Fuchs();
Hund hybrid = new Fuchs();

System.out.println(hybrid.spielen(foxi));// Output is Wuff Ringding
System.out.println(foxi.spielen(hybrid)); // Output is Wuff Ringding
}}

1 Ответ

0 голосов
/ 19 января 2019

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

foxi.spielen (гибрид)

foxi, как известно, Fuchs.У вас есть следующие перегруженные методы

  • public String spielen (Hund h);(унаследовано от Хунда)
  • public String spielen (Fuchs f);(объявлено в Fuchs)

hybrid объявлено как Hund, поэтому будет вызван первый метод.Неважно, что это на самом деле Fuchs во время выполнения.Вы получите второй метод с foxi.spielen((Fuchs)hybrid).

Может быть, вы намеревались переопределить вместо перегрузки метода?Тогда это действительно напечатало бы ваш ожидаемый результат.Но этого не произошло, потому что для переопределения метода, вы должны точно соответствовать типам параметров.Если вы намереваетесь переопределить метод, вы должны использовать аннотацию @Override, которая предупредит вас о таких ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...