一个关于类之间的类型转换的问题! a1=(ATest)b2,a2=b2,b1=(BTest)a1 强制类型转换把a1强制转换成 ATest类型来处理 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 a1,a2是ATest类型的变量,就象String str;一样a1=(ATest)b2是指将对象b2转化成ATest类型后赋给a1,此时b2已经是ATest类型;所以a2=b2就是指将b2赋给a2,此时它们的类型一致;因为b1是类BTest的对象,所以要想将a1赋给b1必须进行类型转换b1=(BTest)a1该程序运行的结果为:class:Atestclass:Atestclass:Btest 因为BTest是从ATest继承而来,BTest的对象就是ATest的对象,所以,从b2到a1到转换可以省去强制类型转换,即a1 = b2;而a1本身是父类对象,所以,转成子类对象需要强制转换。在Java中,reference其实只是一个别名。你用a1的reference指向类b2,所以,它就成了b2这个对象的别名,所以不用new也可以!可以尝试了解Liskov替换原则,对于继承关系到解释是最棒的。Robert Martin的《敏捷软件开发》有关于LSP的详细讲解。 对于junxi() 的回答,我还有点疑问,你的意思是不是说如果这个时候我写下面的语句:System.out.println(b2.s);的话,就要输出class:A了啊还有,我想问一下,如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1;的话,会怎么样呢?对DreamHead的回答,我不了解什么是reference,还有这里没有类b2 啊,不知道能不能给我在详细地解释一下,我对你的“在Java中,reference其实只是一个别名。你用a1的reference指向类b2,所以,它就成了b2这个对象的别名,所以不用new也可以!”还是不懂,谢谢!! 刚才在解释a2=b2的时候,解释错了,应该是这样的,因为BTest是从ATest继承而来,BTest的对象就是ATest的对象,所以,从b2到a1到转换可以省去强制类型转换,即a1 = b2;a2=b2 而ATest是BTest的父类,所以要把ATest的对象赋给BTest的对象的时候,必须进行类型转换!!~~~~~~~ 你的意思就是说当要用到父类对象时,可以用子类的对象来代替,是吗?还有,我刚刚提出的问题,希望你也能帮我解答一下:“如果这个时候我写下面的语句:System.out.println(b2.s);的话,就要输出class:A了啊还有,我想问一下,如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1;的话,会怎么样呢?” 我改了程序了,想不明白才来题问的啊我现在就是想知道,既然b2已经赋给了a1,那么,调用a1.s时,为什么还是出现了class.ATest;这时的a1,不是变成b1了吗 System.out.println(b2.s);输出:class:Btest如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1程序调试的时候有3个错你自己调一下就知道了 想明白了,谢谢各位的帮助,特别要感谢junxi的帮助!! 一个窗体浮在另一个窗体之上 win7中runnable jar的设置 我SWING里有个JProgressBar 控制,如何在调用CALSS时修改JProgressBar 的百分比?? ultraedit中编译java程序出现的问题 程序问题,请进 xxx.equals(null)和xxx == null 的区别 解释?? 谁能帮我做一个类? 如果在文件夹下面包含有文件,如何删除该文件夹 请教Class.forName疑问 求助:一段鼠标事件的代码老是不能编译,帮帮忙! 数据库连接出现异常,请各位大哥指点指点.再线等,问题解决就给分.
a1=(ATest)b2是指将对象b2转化成ATest类型后赋给a1,此时b2已经是ATest类型;所以a2=b2就是指将b2赋给a2,此时它们的类型一致;因为b1是类BTest的对象,所以要想将a1赋给b1必须进行类型转换b1=(BTest)a1该程序运行的结果为:
class:Atest
class:Atest
class:Btest
a1 = b2;
而a1本身是父类对象,所以,转成子类对象需要强制转换。在Java中,reference其实只是一个别名。
你用a1的reference指向类b2,所以,它就成了b2这个对象的别名,所以不用new也可以!可以尝试了解Liskov替换原则,对于继承关系到解释是最棒的。
Robert Martin的《敏捷软件开发》有关于LSP的详细讲解。
还有,我想问一下,如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1;的话,会怎么样呢?对DreamHead的回答,我不了解什么是reference,还有这里没有类b2 啊,不知道能不能给我在详细地解释一下,我对你的“在Java中,reference其实只是一个别名。
你用a1的reference指向类b2,所以,它就成了b2这个对象的别名,所以不用new也可以!
”
还是不懂,谢谢!!
a1 = b2;a2=b2
还有,我刚刚提出的问题,希望你也能帮我解答一下:“如果这个时候我写下面的语句:System.out.println(b2.s);的话,就要输出class:A了啊
还有,我想问一下,如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1;的话,会怎么样呢?”
我现在就是想知道,既然b2已经赋给了a1,那么,调用a1.s时,为什么还是出现了class.ATest;
这时的a1,不是变成b1了吗
输出:class:Btest
如果没有a1=(ATest)b2; a2=b2; b1=(BTest)a1
程序调试的时候有3个错你自己调一下就知道了