读书人

继承关系的类转化有关问题

发布时间: 2012-01-08 22:48:50 作者: rapoo

继承关系的类转化问题
只简单的帖一点代码了:

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

读书人网 >C#

热点推荐