继承关系的类转化问题
只简单的帖一点代码了:
Base b1 = new Base(); b1.i = 10;
Test t1 = new Test(); t1.i = 20;
int ii = ((Base)(t1)).i; // 没有输出,但是输出结果为什么是0?
System.out.println( "ii= " + ii); // out: ii=0
System.out.println(b1.i); // 10
System.out.println(t1.i); // 20
((Base)(t1)).i = 30;
ii = ((Base)(t1)).i;
System.out.println( "ii= " + ii); // out: ii=30
System.out.println(b1.i); // 10
System.out.println(t1.i); // 20
class Test extends Base
{
public int i;
Test() { System.out.println( "Test() "); }
}
class Base
{
public int i;
Base() { System.out.println( "Base() "); }
}
我用C#和java都测试了结果一样,感觉中间那两块的输出很费解。。。
请帮我解释一下,谢谢。
我感觉要不就创建了临时对象,要不就引用原来的对象,但是无论那个方面也不能解释。
------解决方案--------------------int ii = ((Base)(t1)).i; // 没有输出,但是输出结果为什么是0?
因为Test类的成员i覆盖了基类的成员i
当t1转换成基类时,由于基类的成员没有赋值过,所以为0
class Test extends Base
{
public int i;
Test() { System.out.println( "Test() "); }
}
改为
class Test extends Base
{
Test() { System.out.println( "Test() "); }
}
再看看
------解决方案--------------------楼上正确
------解决方案--------------------System.out.println( "ii= " + ii); // out: ii=0
这里只访问了Test 里面的i