Java 中的继承及其令人困惑的事情

问题描述 投票:0回答:1
class A {
    public void m() {
        System.out.println("A.m");
    }
    public void n() {
        System.out.println("A.n");
    }
}

class B extends A {
    @Override
    public void n() {
        System.out.println("B.n");
    }
    
    public void p() {
        System.out.println("B.p");
    }
}

class C extends A {
    @Override
    public void m() {
        System.out.println("C.m");
    }
}

class D extends C {
    @Override
    public void m() {
        System.out.println("D.m");
    }
    @Override
    public void n() {
        System.out.println("D.n");
    }
    
    public void p() {
        System.out.println("D.p");
    }
}

public class Main {
    public static void main(String[] args) {
        A a = new D();
        a.m();
    }
}

当类 A 不是类 D 的直接超类时,为什么编译器不报告语句

A a = new D();

请有人向我解释一下对象类型引用类型之间的区别。非常感谢。

java inheritance constructor overriding new-operator
1个回答
0
投票

D is_a C 且 C is_a A。因此,D 也是 is_a A。就这么简单。

extends
定义的子类是可传递的(使用
implements
实现的接口也适用于所有子类)。

© www.soinside.com 2019 - 2024. All rights reserved.