黑马程序员技术交流社区
标题:
在其他地方看到的,同问
[打印本页]
作者:
deng2242
时间:
2015-8-19 23:03
标题:
在其他地方看到的,同问
本人初学java,始终想不明白继承中多态的好处或者使用场景。
觉得父类也就起到一个声明方法等的作用。
如下代码:
class Animal{
void eat(){
}
}
class human extends Animal{
void eat(){
//重写eat方法
}
}
Animal类也就相当于提供一个默认的eat方法,但一般都会被子类重写,
既然这样,那Animal p = new human();这样还有什么意义呢?或者说父类只是为了提供一个默认的吗?
直接human p = new human();不是也可以吗??
作者:
yongyinqi
时间:
2015-8-19 23:26
本帖最后由 yongyinqi 于 2015-8-19 23:39 编辑
算了,edit
作者:
kenfans
时间:
2015-8-19 23:35
这样就可以new父类对象指向子类,通过父类调用这个方法了啊
作者:
liuch111
时间:
2015-8-20 10:54
单一调用的 eat(),当然都一样了,体现不了多态的 扩展性
比如human和 dog 及pig 都有复写animal的eat()方法
有一个类(Fun)中有一个方法要去调用animal的 eat()功能
class Fun{
...
setAnimal(Animal animal){
this.animal = animal;
}
}
...
public static void main(String args[]){
Fun f = new Fun(); Animal dog =new Dog();
f.setAnimal(dog);
//这里可dog 可pig 可human,只要是animal的子类都可以,扩展提过 ,日后需求变了,修改代码也方便,如果用你的方法
f.eat();
}
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------
class Fun{
...
setAnimal(Pig pig){
this.pig = pig;
}
}
...
public static void main(String args[]){
Fun f = new Fun(); Pig pig =new Pig();
f.setAnimal(pig); // 功能受限,不利于扩展
f.eat();}
作者:
mmppp
时间:
2015-8-20 16:20
你举得这个例子只是老师在上多态的时候的一个例子而已.就是为了体现出父类的引用指向子类的对象这个多态的
表现形式而已.其实这个并不是多态真正的用处.多态的用处是可以提高了程序的扩展性.比如你在定义方法的时候哦
形式参数接收的时候就可以定义为 父类,这样的话 只要是他的子类都可以当做参数传递进方法中.例如eat(Animal a)
这就是吧参数定义为父类的类型,这样的话不管是猫还是狗都能够传入进来.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2