为什么使用子类构造函数初始化的超类对象继承子类方法而不是其变量

时间:2015-02-24 18:40:32

标签: java oop inheritance

我在以下代码中难以理解继承的概念。

package testPackage;

public class Threaddy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MainThread mt = new SubThread();
        mt.run(); //Output -> This is SubThread
        System.out.println(mt.i); //Output -> 2
    }
}

class MainThread {
    int i = 2;
    public void run() {
        System.out.println("This is Main Thread");
    }
}

class SubThread extends MainThread {
    int i = 1;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Subthread");
    }

}

这里我有2个类MainThread(Super-class)和SubThread(Sub-class)。

我已经将超类的对象创建为mt,但是使用子类的新构造函数进行了初始化。我相信这是可能的,因为子类扩展了超类。

然而,当我执行这个超类对象的方法时,它运行方法run的子类实例。但是,如果我尝试打印变量i,它只返回int i的超级版本。

我的问题是为什么它运行Sub-class方法,但只有变量的超类版本?

有没有办法(不改变初始化对象的方式)访问超类方法run()并访问变量i的子类版本?

0 个答案:

没有答案