classa{Strings="class:a";publicvoidt1(inta,intc,Stringb){System.out.println("thisisT.t1");}}publicclassbextendsa{Strings="class:b";publicvoidt1(inta,intc,Stringb){System....
class a
{
String s="class:a";
public void t1 (int a,int c,String b){
System.out.println("this is T.t1");
}
}
public class b extends a
{
String s="class:b";
public void t1 (int a,int c,String b){
System.out.println("this is P.t1");
}
public static void main(String args[])
{
b b1,b2,t=new b();
a a1,a2,t3;
a1=(a)b2;
a2=b2;
t3 = (a) t;
t3.t1(1,1,"");
System.out.println(a1.s);
System.out.println(a2.s);
b1=(b)a1;
System.out.println(b1.s);
}
}
运行程序 结果显示:
this is P.t1
class:a
class:a
class:b
上面的程序首先是属性之间的强制转换
a1=(a)b2;
a2=b2;
这时 调用a1.s 和 a2.s输出都是为 class:a 可以理解 因为是把子类对象b1,b2强制类型转换成父类赋给a1,a2
然后是方法的强制转换
t3 = (a) t;
但是这时输出的是 this is P.t1 这时子类 b的方法 我觉得找个跟上面的属性应该一样子类对象 t强制类型转换成父类赋给t3、
应该输出父类的方法 this is T.t1 才对
请教java 高手
看懂了这个程序再回答 谢谢
展开