如果我的问题很愚蠢,请不要生气)
我有一段代码:
public class LinkageTest {
public static class Parent {
public void test() {
System.out.println("parent::test");
}
}
public static class Child extends Parent {
public void test() {
System.out.println("child::test");
}
}
public static class Tester {
public void test(Parent obj) {
System.out.println("Testing parent...");
obj.test();
}
public void test(Child obj) {
System.out.println("Testing child...");
obj.test();
}
}
public static void main(String[] args) {
Parent obj = new Child();
Tester t = new Tester();
t.test(obj);
}
}
当我运行它时,会打印下一个字符串:
测试父...子::测试
如果我们有 Child
的实例,我不明白为什么要调用带有 Parent
的 test
方法?有人可以帮助我吗?
最佳答案
1) Child
类重新定义(覆盖)test
方法。 (多态性)
2) 在Tester
类中,重载了test(Parent obj)
和test(Child obj)
方法。当您调用该方法时,会选择具有适当类型的方法。
3) 在t.test(obj)
时,变量obj
有一个显式定义的Parent
类型,所以适当的方法将被选中并打印“Testing parent ...”。
4) 在obj.test()
时,Child
类的测试方法将被调用,因为这是一个多态性
关于java - 理解Java中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247145/