小编Tom*_*ngo的帖子

Java不一致的继承机制?

我想我们已经在这篇文章中讨论了这个问题,这里继承Java简单说明

但由于这里的例子有点简单,我想澄清的意思不同,我会试一试.

首先,讨论两个类:

public class SuperClass{
    SuperClass() {
        foo();
    }

    public void foo() {
        System.out.println("Super.foo()");
    }

    public static void main(String[] args) {
            SuperClass tn = new DerivedClass();
            tn.foo();
    }
}

public class DerivedClass extends SuperClass{
    String i;

    TrickyB() {
        i = "aksjhdf";
    }

    public void foo() {
        System.out.println("In derived.foo() --> " + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我(至少我认为)理解多态的概念,我知道DerivedClass.foo()调用时调用的原因

new DerivedClass();
Run Code Online (Sandbox Code Playgroud)

我在这看到一个不一致的地方:

当我们调用c'tor DerivedClass的c'tor时,SuperClass隐含地称为(所以说作为Derived c'tor的第一行).

所以在Super c'tor中,DerivedClass没有完全初始化,这使得使用这个类没用.这一点反映在该计划的输出中

In derived.foo() --> null
In derived.foo() --> aksjhdf …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance

3
推荐指数
1
解决办法
112
查看次数

标签 统计

inheritance ×1

java ×1

oop ×1