java - 理解Java中的继承

标签 java inheritance

如果我的问题很愚蠢,请不要生气)

我有一段代码:

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 的实例,我不明白为什么要调用带有 Parenttest 方法?有人可以帮助我吗?

最佳答案

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/

相关文章:

java - JMF替换

java - Android Studio 不生成像 MainActivity 这样的样板 Java 类

java - 如何使用另一个数组反转一个数组中的整数?

java - 如何使用非静态方法泛型?

Python3通用继承层次结构

javascript - 在 javascript 中扩展 Promise

scala - Scala 对象定义中没有父类(super class)名称的 "extends {..}"子句有什么作用?

c# - 在 C# WPF 中创建可绑定(bind)点

xcode - 为什么在子类化和抽象实体时必须设置父实体?

java - find 是带有开始和结束字符的正则表达式