Переопределение метода со ссылкой, переданной в качестве аргумента
Этот вопрос основан на концепции, что когда я сохраняю ссылку на дочерний класс в родительской переменной класса. И, используя эту переменную, я вызываю метод, который присутствует в обоих классах Child-Parent.Here, дочерний метод должен вызываться, и он но этого не происходит, когда я передаю ссылку в качестве параметров, почему?
class Parent
{
public void show()
{
System.out.println("Parent");
}
}
class Child extends Parent
{
public void show()
{
System.out.println("Child");
}
}
public class Call {
public static void main(String args[])
{
Parent p=new Child();
p.show();
}
}
Ожидаемый результат: "Child" Фактический результат: "Child" [как и ожидалось]
Но,
class Parent
{
public void show(Parent x)
{
System.out.println("Parent");
}
}
class Child extends Parent
{
public void show(Child x)
{
System.out.println("Child");
}
}
public class Call {
public static void main(String args[])
{
Parent p=new Child();
p.show(new Child());
}
}
Почему вывод "Родитель" в этом случае?
1 ответ
Решение
Это связано с тем, что во втором примере child не переопределяет метод show. Поэтому, когда вы вызываете p.show(new Child()), он фактически вызывает метод родительского класса, а не child.
Надеюсь, это понятно.