java中关于父类引用指向子类对象,多态性的问题~虚心求教

通过父类引用指向子类对象,多态性的体现的两种情况
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:我知道肯定有用,但是我就是被绕进去了出不来~求领路)

你这么去理解,用你上面第2点说明,如果父类Parent中有个炒菜的方法,里边是parent炒菜的过程和需要的材料,子类Son重写了父类中的炒菜方法,但是子类炒菜方法与parent完全不同(儿子喜欢另一种炒菜方法),那么在程序中调用p.炒菜方法时,就会调用子类的炒菜方法。
所以多态实现的是:通过父类或接口调用子类或实现类里的重写方法或者实现方法,除非继承的子类没有重写父类任何方法,否则调用的都是子类里边重写的方法
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-11
不知道楼主是想知道有什么区别,还是想知道有什么好处(用处)?

区别就是:Parent p = new Son(),调用的是子类里重写的父类的方法;而Parent p = new Parent()调用的是自己的。

好处就是:你可以不用管子类是怎么实现的,也不用管到底有没有子类,特别是在p作为其他方法参数的时候,如:doSomething(Parent p){
p.xxx
}

当然你也可以说接口、抽象类也可以这么实现,但是各有各的好处,看你具体的应用了。
第2个回答  2014-03-11
是这样的:向上转型(以上定义,父类应用指向子类对象)只是实现多态的一种方式。该方式定义的对象,首先会调用子类的方法,前提是子类有重写;如果没有,则会调用父类方法。
第3个回答  2014-03-11
Parent p = new Son() 假设Son中重写Parent的方法A,这样 p中的A()是Son中的方法;

Parent p = new Parent() 而这样 p中的A() 是Parent中的A()方法。
第4个回答  2014-03-11
比如eat()方法只要在Animal里定义一次就可以了,不需要再每种动物对象里面都定义
相似回答