Почему следующий код генерирует вывод «в супер», когда тип объекта является подклассом (OtherClass2), а аргумент тестовой функции имеет тип Person2? Не следует ли тестировать вызов метода (новый Person2()); вызвать тестовую функцию подкласса?Перегрузка подкласса Java-класса не вызывается из суперкласса
public class HelloWorld
{
public static void main(String[] args)
{
OtherClass2 s = new OtherClass2();
s.goToThing();
}
}
public class Person
{
}
public class Person2 extends Person
{
}
public class OtherClass
{
public void hello()
{
test(new Person2());
}
public void test(Person p)
{
System.out.println("in super");
}
}
public class OtherClass2 extends OtherClass
{
public void test(Person2 g)
{
System.out.println("In sub");
}
public void goToThing()
{
hello();
}
}
Перегрузка происходит во время компиляции; компилятор решает вызвать 'test (Person)', а затем, когда ваша программа запускается, проверяет, есть ли в подклассе 'test (Person)', которого нет. – immibis