通过父类引用指向子类对象,多态性的体现的两种情况
1.List l = new ArrayList();
当父类为接口,即父类的所有方法都是抽象方法,必须靠实例化子类来实现父类的方法,所以此时必须要用List l = new ArrayList()形式来实现父类中的方法
2.Parent p = new Son();
当父类为正常的类的时候,如果用父类引用指向子类对象,能调用的方法只能是父类中有的或者是子类重写父类的方法,而不能调用子类有的而父类没有的方法。
如果无论如何都只能调用父类中的方法
Parent p = new Son()和Parent p = new Parent()又有什么区别呢?子类中有的而父类中没有的方法又不能被调用..
看过最多的例子是Animal c = new Cat()和Animal d = new Dog(),我只明白了这样多态性方便程序维护比如再加入一个Animal t = new Tigger()可以直接加.
但是无论怎么该能调用的方法依然只是Animal类中的方法而已呀.又不能调用子类中特有的方法..实在搞不懂有什么用..求解答~(PS:我知道肯定有用,但是我就是被绕进去了出不来~求领路)
java中关于父类引用指向子类对象,多态性的问题~虚心求教
答案:6 悬赏:50 手机版
解决时间 2021-02-03 07:38
- 提问者网友:骑士
- 2021-02-03 03:00
最佳答案
- 五星知识达人网友:拜訪者
- 2021-02-03 03:42
你这么去理解,用你上面第2点说明,如果父类Parent中有个炒菜的方法,里边是parent炒菜的过程和需要的材料,子类Son重写了父类中的炒菜方法,但是子类炒菜方法与parent完全不同(儿子喜欢另一种炒菜方法),那么在程序中调用p.炒菜方法时,就会调用子类的炒菜方法。
所以多态实现的是:通过父类或接口调用子类或实现类里的重写方法或者实现方法,除非继承的子类没有重写父类任何方法,否则调用的都是子类里边重写的方法
所以多态实现的是:通过父类或接口调用子类或实现类里的重写方法或者实现方法,除非继承的子类没有重写父类任何方法,否则调用的都是子类里边重写的方法
全部回答
- 1楼网友:雪起风沙痕
- 2021-02-03 08:04
比如eat()方法只要在Animal里定义一次就可以了,不需要再每种动物对象里面都定义
- 2楼网友:一叶十三刺
- 2021-02-03 06:25
不知道楼主是想知道有什么区别,还是想知道有什么好处(用处)?
区别就是:Parent p = new Son(),调用的是子类里重写的父类的方法;而Parent p = new Parent()调用的是自己的。
好处就是:你可以不用管子类是怎么实现的,也不用管到底有没有子类,特别是在p作为其他方法参数的时候,如:doSomething(Parent p){
p.xxx
}
当然你也可以说接口、抽象类也可以这么实现,但是各有各的好处,看你具体的应用了。
- 3楼网友:廢物販賣機
- 2021-02-03 06:16
Parent p = new Son() 假设Son中重写Parent的方法A,这样 p中的A()是Son中的方法;
Parent p = new Parent() 而这样 p中的A() 是Parent中的A()方法。
- 4楼网友:山有枢
- 2021-02-03 06:06
在多态性处理时,有时需要判明某个引用到底指向哪个实例,可以使用的运算符是 instanceof。
- 5楼网友:愁杀梦里人
- 2021-02-03 04:33
是这样的:向上转型(以上定义,父类应用指向子类对象)只是实现多态的一种方式。该方式定义的对象,首先会调用子类的方法,前提是子类有重写;如果没有,则会调用父类方法。
再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯