System.out.println(d.i);
为什么方法调用的是变量i是父类对象的。其实是多态的问题。多态是针对子类重写父类的方法的,但对变量则没有多态。
比如Super d=new Demo("A");是创建了一个子类对象并把它当成父类对象Super用也就是父类引用指向子类对象 此时,引用变量d有2个类型,编译时的类型为Super,运行时的类型为Demo.在代码编译过程中,Super 只能调用属于Super的方法. 不能调用Demo类里面的方法.注意,由于继承关系,如果Demo重写了Super的某个方法,
假如说Super有一个方法a(),而在代码编译过程中,Super.a()调用的是Super的a(),但在程序运行时,却运行的是Demo的a().
这就是多态 |