向上转型的难解
1、课程对于Animal one=new Animal();和Animal two=new Cat();之间的区别讲的使人不能理解,听了几遍后还是不懂。Animal two是指声明一个Animal类的对象two,但是保存的引用地址确是子类Cat的实例:new Cat(),不能够理解。
2、基于对第一个问题的难解,更不能明白为什么父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法。
3、Animal two=new Cat();
这到底是是Animal的对象实例还是Cat类的?我完全混乱。
4、归根究底,对于什么是多态,在我不懂的这段代码里,体现了多态的什么?
希望老师能以通俗而详细的形式解答我的困惑,不然感觉在这里要被卡死了。谢谢,敬候佳音!
正在回答
同学你好,
1、关于 给这个猫在起了个代号 “two”,但是你当时心里没记住它具体是啥,就记住了它是动物,代号是two; 这是电脑的存储方法,是以面向对象来存储的,通过抽象的大类来具体调用实例化的具体的小类,通过大类不同的实现来调用不同的小类,方便了开发。
2、为什么能调用子类重写父类的方法,还是不理解
例如: 在生活中,动物是一个大类,这个大类中有跑、吃等具体的行为方法,现在有猫、狗、树袋熊这三个具体的子类,假如树袋熊能够上树,我们可以说树袋熊可以上树,但不能说动物可以上树,因为不是所有的动物都会上树,但是可以说树袋熊可以吃饭!
所以说向上转型后,能调用子类重写父类的方法。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
关于同学的第一个问题:
1、课程对于Animal one=new Animal();和Animal two=new Cat();之间的区别讲的使人不能理解,听了几遍后还是不懂。Animal two是指声明一个Animal类的对象two,但是保存的引用地址确是子类Cat的实例:new Cat(),不能够理解。
Animal one=new Animal(); 这句代码你可以理解为:
你发现了一个动物,然后你内心给这个动物在起了个代号 “one”;
Animal two=new Cat(); 这句代码你可以理解为:
你发现了一个猫,然后你给这个猫在起了个代号 “two”,但是你当时心里没记住它具体是啥,就记住了它是动物,代号是two;
那你说,这个two 代表的是啥,代表的其实就是 之前new 的这个猫。
关于第二个问题:
2、基于对第一个问题的难解,更不能明白为什么父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法。
答:
你想啊,你忘记它是猫了,你只能想着,动物two有什么什么方法,你不记得它是猫了呀,怎么能去调用猫特有的方法呢?所以你只能调用它动物的方法。至于为啥它执行的是子类重写的方法。因为它自己知道自己是啥,你让动物two去eat,它肯定去吃猫粮,而不是狗粮,因为它代表的猫的对象。
关于第三个问题:
3、Animal two=new Cat();
这到底是是Animal的对象实例还是Cat类的?我完全混乱。
答:同学可以理解为是Cat类型的对象
第四个问题:
4、归根究底,对于什么是多态,在我不懂的这段代码里,体现了多态的什么?
我举个例子:
比如你想看动物吃东西,跑,跳等等。可能你一会儿想看dog,一会儿想去看Cat。
那你可以想看猫的时候: Animal three = new Cat();
three.吃();
three.跑();
three.跳();
想看狗了,只修改Animal three = new Dog();就可以了。
three.吃();
three.跑();
three.跳();
就不用改了,你看的就是狗的吃,跑,跳了。
可能现在你不觉得有多方便,如果这个方法多了,继承Animal的多了,就体现出优势来了。
就是你赋值了three 对象是它的什么子类,展示方法的时候,就展示的是对应的子类的重写的方法。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星