这是我从书里看到的代码。问题有下:
1:我删除1中的代码,程序输出不变,是不是1中的代码可有可无?
2:2为下溯造型,但我将2删除后打3的代码进去,程序输出不变,用2不用3的代码是为什么?
3:下溯造型有什么用?我看别人说的贴,说下溯造型不安全,加instanceof更安全;但不知下溯造型是用来干嘛的?
4:软件工程专业,我人好奇心较重,不要怪我问题多!!!public class Animals { void breathe() { System.out.println("AAA"); } final static void live(Animals an) { //1 an.breathe(); //1 } } class Fish extends Animals{ void swim(){ System.out.println("我会游泳"); }} class jhi{ public static void main(String[] args){ Animals an=new Fish(); an.breathe(); Fish f=(Fish) an; //2 f.swim(); //2 Fish f2=new Fish(); //3 f2.swim(); //3 } }
1 回答
北顾岛城
TA贡献14条经验 获得超9个赞
1.你live方法压根没调用,当然输出不变。
2.你用3代码不用2代码输出肯定不变,它这里用2主要是给你演示下转型(你说的下溯造型)是怎么用的。
3.下转型的确不安全,因为需要程序员知道要转的类型而不是由程序确定(程序永远不会记错,而程序员会)。至于它的用处肯定是有的,目前我用到的地方就是泛型里,毕竟以前的老代码那么多都是没有泛型概念的,所以默认都是object,取出来的时候需要手动转成需要的类型才能使用。为什么不用instanceof,因为instanceof只是判断而已,它没有改变类型啊,也就是说原对象没有下转型就不能使用自己原本子类的变量和方法。
4.我也是软工的,今年大三了,建议初学的话不要掉进技术细节了,要抓大放小,很多你不明白的东西等你学了诸如数据结构等一些基础课就都明白了。
祝学有所成。
添加回答
举报
0/150
提交
取消