当前位置: 代码迷 >> Java相关 >> [讨论]多态问题
  详细解决方案

[讨论]多态问题

热度:316   发布时间:2007-07-10 21:26:04.0
[讨论]多态问题
class A
{
String s="class A";
void show()
{
System.out.println("A1");
}

}
class B extends A
{
String s="class B";
//String s1="class B1";
void show()
{
System.out.println("B1");
}
}
class TypeConvert
{

public static void main(String args[])
{
B b1,b2=new B();
A a1,a2;
a1=(A)b2;
a2=b2;
System.out.println(a1.s);
System.out.println(a2.s);
a1.show();
b1=(B)a1;
//System.out.println(b1.s1);
System.out.println(b2.s);
System.out.println(b2.s);
b1.show();
}
}
结果:
class A
class A
A1
A1
class B
class B
B1
B1


为什么回有如此结果?
讨论.....

搜索更多相关的解决方案: 多态  

----------------解决方案--------------------------------------------------------
照你的代码输出跟你的结果不一样

结果为:
class A
class A
B1
class B
class B
B1
----------------解决方案--------------------------------------------------------

多态只作用于方法,而不会作用于数据成员。当要访问一个类对象的数据成员时,变量类型总是决定该数据成员所属的类。所以调用a1.s,a2.s时都是打印class A。调用b1.s,b2.s时候总是打印class B.
当调用a1.show()的时候,因为a1引用的是 类B的对象,此时是多态,所以打印出B1
对于b1,因为a1引用的就是类B的对象,b1=(B)a1相当于将 类B的对象还原了,b1.show()就调用了类B中的show方法,打印出B1
/*b1=(B)a1不知道怎么说,自己理解理解吧,就这个意思。
有不妥的地方请指正*/


----------------解决方案--------------------------------------------------------

对对

[此贴子已经被作者于2007-8-1 20:09:56编辑过]


----------------解决方案--------------------------------------------------------
就  huwangvs 说的那样了  
----------------解决方案--------------------------------------------------------

Thank U


----------------解决方案--------------------------------------------------------
  相关解决方案