A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© deng2242 中级黑马   /  2015-8-19 23:03  /  313 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本人初学java,始终想不明白继承中多态的好处或者使用场景。
觉得父类也就起到一个声明方法等的作用。
如下代码:
class Animal{
    void eat(){
    }
}
class human extends Animal{
    void eat(){
        //重写eat方法
    }
}
Animal类也就相当于提供一个默认的eat方法,但一般都会被子类重写,
既然这样,那Animal p = new human();这样还有什么意义呢?或者说父类只是为了提供一个默认的吗?
直接human p = new human();不是也可以吗??

4 个回复

倒序浏览
本帖最后由 yongyinqi 于 2015-8-19 23:39 编辑

算了,edit
回复 使用道具 举报
这样就可以new父类对象指向子类,通过父类调用这个方法了啊
回复 使用道具 举报
单一调用的 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();}



回复 使用道具 举报
你举得这个例子只是老师在上多态的时候的一个例子而已.就是为了体现出父类的引用指向子类的对象这个多态的
表现形式而已.其实这个并不是多态真正的用处.多态的用处是可以提高了程序的扩展性.比如你在定义方法的时候哦
形式参数接收的时候就可以定义为 父类,这样的话 只要是他的子类都可以当做参数传递进方法中.例如eat(Animal a)
这就是吧参数定义为父类的类型,这样的话不管是猫还是狗都能够传入进来.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马