Java继承行为

时间:2015-09-11 19:01:51

标签: java

我想了解java中的特定代码,

package test;

public class TestDerived extends Test {

    public static void main(String[] args)
    {
        System.out.println("Hello world");
        TestDerived td = new TestDerived();
        Test t = new Test();//Second call
        System.out.println(td.science);
    }

    TestDerived()
    {
        super();//First call
        showMyAttribute();
    }

    @Override
    protected void showMyAttribute()
    {
        System.out.println(getClass().getName() + " : " + math);
    }

    int math = 10;
}

class Test {

    Test()
    {
        showMyAttribute();
        System.out.println("Test");
    }

    protected void showMyAttribute()
    {
        System.out.println(getClass().getName() + " : " + science);
    }

    int science = 9;
}

当我运行它时,我得到以下输出,

test.TestDerived : 0
Test
test.TestDerived : 10
test.Test : 9
Test
9

我还没有完全理解java的这种行为。通过查看java的属性,我觉得它与运行时多态性有关,虽然我不确定我是否正确,并且对如何生成此输出一无所知。首先,当使用构造函数super调用super方法时,它会给出值0。然后当我在main方法中显式调用超类的构造函数时,我得到一个合适的值。稍后当我使用子类对象打印变量science的值时,它会给出正确的值。当我使用super()从子类的构造函数调用它时,以及显式调用它时有什么区别。我需要帮助才能理解这一点。

0 个答案:

没有答案