爲什麼當對象的類型是子類(OtherClass2)並且測試函數的參數是Person2類型時,以下代碼會生成「in super」輸出?方法不應該調用測試(新的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