关于类型转换后的疑问
1.Animal a = new Cat();来说,Cat c = new Cat();既然a不能使用Cat()内的非父类相关的方法,这么说就相当于是一个不完整的Cat类对象,那还不如直接定义一个Cat a = new Cat();这样就好了,这么定义的好处在哪呢?
2.Cat c2 = (Cat)a;父类和子类的引用(对象就是引用么)都在栈里面么?他们有什么关系?向上或向下转型后,是父类和子类的引用共同指向了原来堆内的内存么?
3.对象只是存储堆内的地址,为什么转型对象会改变指向内存空间的内容呢(就是具有子类特征的父类对象)?
对多态理解比较混乱,语言组织不太好,望详细解答一下,谢谢
正在回答
1、对于这个问题,多态的应用是有它的场景的。比如:一个类有多个子类,而有一个方法需要对这些子类中的需要从父类继承来的方法进行调用,那么这个方法的参数就可以是父类的引用。然后调用方法时传入子类的对象即可。这就是多态的一种体现。
Animal a=new Cat()是在需要多态的场景下适应的,就像上面说的场景,所以不能说它是一个不完整的Cat类对象。
2、对象不是引用,比如Cat cat;在这里cat是引用。Cat cat=new Cat(); 在这里new Cat()是创建了一个对象。引用指向对象,可以理解为cat引用代表对象,通过cat可以去访问对象。引用是存储在栈中的,而对象是存储在堆中的。
向上和向下转型后,父类和子类的引用是共同指向了该对象。
3、地址表示的是内存的一块存储空间,数据就存储在这块空间里,只不过输出对象得到的是内存地址而已,但只要重写toString()方法,再输出对象时就可以输出存储的内容了。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星