本帖最后由 周世阳 于 2012-8-23 19:23 编辑
成员覆盖和方法覆盖应该是同样的道理,可是如下代码
public class Demo
{
public static void main(String[] args)
{
B b = new B();
System.out.println(b.a);//输出b对象中a的值
b.sop();//调用b对象的sop方法
System.out.println("-------------------------------------------");
System.out.println(((A)b).a);//将b对象转换为A类型,输出a值
((A)b).sop();//将b对象转换为A类型,调用sop方法
}
}
class A{
int a=10;
public void sop(){
System.out.println("you are print A class");
}
}
class B extends A{
int a=20;//覆盖a成员
public void sop(){//覆盖sop方法
System.out.println("you are print B class");
}
}
打印结果为
20
you are print B class
-------------------------------------------
10
you are print B class
同样都是打印B的sop方法是合理的,但是a的值在b对象为A类型的视乎打印的是A的a的值,为什么?
覆盖成员和方法应该原理都是一样的,虽然引用是A类型但实际对象还是B类对象,指向的应该还是B的a值才对,求解释 |