繁体   English   中英

与子类和超类的混淆

[英]Confusion with subclasses and superclasses

Master test = new Inner();
System.out.println(test.getClass());

在上面的示例中,Inner类扩展了Master类,但是我感到困惑的是test.getClass()返回Inner,但是测试不是真的是Master类型吗? 除了构造函数外,Inner类不能使用任何方法/属性,只能使用Master类中的方法/属性。 此外,Inner的构造函数实际上设置了Inner专有的属性,但是即使它们使用构造函数,这些属性在某种程度上在测试中也不存在-这似乎不起作用。

例如,如果将类定义为:

public class Master {
    public int number = 0;
    public Master() {
        number = 9;
    }
}

public class Inner extends Master {
    public int innerNumber = 0;
    public Inner() {
        number = 1;
        innerNumber = 2;
    }
}

测试将使用设置了innerNumber的Inner构造函数,但是test.innerNumber甚至不存在,因为innerNumber与Master类型没有区别。 另外,test.getClass()表示它是内部类型,而不是主类型。

Object.getClass()返回对象的动态类型的类对象,而不是静态类型(声明了它的变量或属性的类型)。

因此,无论持有引用的变量类型是什么, new Inner().getClass()返回Inner.classnew Master().getClass()返回Master.class

问题1:

Master test = new Inner();

上面的代码行表示从Inner类( ovveriding )获取方法的实现。 因此内部类的getClass()方法调用。

问题2:

test.innerNumber 

继承发生在父母之间。 innerNumberInner (子级)的属性。 Master (父母)不会得到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM