オブジェクトの型がサブクラス(OtherClass2)であり、テスト関数の引数がPerson2型である場合、次のコードで "super"という出力が生成されるのはなぜですか?メソッドを呼び出すべきではありませんテスト(新しいPerson2());サブクラスのテスト関数を呼び出しますか? OtherClass2
のスーパークラスから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