我在以下代码中难以理解继承的概念。
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
的子类版本?