首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-01-08 
继承关系的类转化问题只简单的帖一点代码了:Baseb1newBase()b1.i10Testt1newTest()t1.i20intii((

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

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

热点排行