继承与多态中的那些事
在定义:
A a=new B();
a.XX();
方法覆盖后,编译时看数据类型,运行是看实际的对象类型(new操作符后面跟的构造方法是那个类的),new谁就调用谁的方法。
在调用属性时:
System.out.println(a.i);
一个对象只有一种形式,但是一个变量却又多种不同形式。
a是一个A的类型,所以他只能访问到A里面定义的属性。所以编译时看数据类型。
所以只有强制类型转换:
A a=new B();
B b=(B)a;
b.i;//这样就可以访问B里面的属性了
class A {
int i=10;
public void XX(){
System.out.println("111");
}
}
class B extends A{
int i=100;
public void XX(){
System.out.println("222");
}
};
class C{}
public class ExtendsTest {
public static void main(String[] args){
A a=new B();
a.XX();
System.out.println(a.i);
}
}
输出:222
10
浙公网安备 33010602011771号