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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘占月 中级黑马   /  2012-3-31 12:43  /  2266 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能给讲讲什么时候应用多态啊?

6 个回复

倒序浏览
多态有编译时多态 和运行时多态。
第一个是通过方法重载实现;第二个是通过方法覆盖实现(子类覆盖父类方法)。
第一种就是我们调用方法是不用区分参数类型,程序会自动执行相应方法,如: 加法运算,可以使int相加,可以是double相加,都是同一个方法名。
第二种就是动态绑定,使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了父类中的跑方法,各自有自己的现实,表现出来多态。  如果有一天你想再加个角色,只用再写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好。
回复 使用道具 举报
多态的好处:
1.可替换性。多态对已存在的代码具有可替换性。
2.可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
3.接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性。多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。

点评

透彻,精辟,学习了  发表于 2012-4-1 07:51
回复 使用道具 举报
ye知道什么好处就知道什么时候用了
回复 使用道具 举报
多态就是父类引用可指向子类对象
回复 使用道具 举报
多态是将子类对象抽象成父类的引用。我就举一个例子吧:
    现在有一个表示动物的类Animal,它还有两个子类,一个表示猫的类Cat,一个表示狗的类Dog。
    Animal animal;
    Cat cat = new Cat();
    Dog dog = new Dog();
    那么,将子类对象抽象成父类引用,就是:
    animal = cat;或
    animal = dog;
    猫和狗都是动物,所以这样的赋值是没问题的。
    但是如果是cat = animal;就会编译出错,因为动物不一定是猫。

    这样的抽象有什么好处呢?假设动物有一个共用的方法,叫睡觉sleep(),但是不同动物睡觉的方式不同,例如:
    abstract class Animal{abstract public void sleep();}
    class Cat extends Animal{
        public void sleep(){// 猫睡觉的动作}
    }
    class Dog extends Animal{
        public void sleep(){// 狗睡觉的动作}
    }
    现在要设计一些方法,看动物是怎么睡觉的,如果每种动物对应一个方法,那么就需要这样定义:
    void displaySleep(Cat cat){cat.sleep();}
    void displaySleep(Dog dog){dog.sleep();}
    但是,随着动物增多,这样的方法需要越来越多,这样的设计是不合理的。有了多态之后,就可以这样设计了:
    void displaySleep(Animal animal){animal.sleep();}
    这样一个方法就行了,要看不同动物的睡觉动作,只要这样调用方法就可以了:
    displaySleep(new Cat());
    displaySleep(new Dog());
回复 使用道具 举报
首先得先知道多太的体现前提好处和弊端:
        体现:父类或者接口的引用指向了自己的子类对象;
        前提:必须要有关系,1、继承,2、实现;3,必须有覆盖的操作;
        好处:提高了程序的扩展性,有了多态,前期设计好的内容可以使用后期出现的子类内容;对与指挥对象做事情的这件事,如果对象很多指挥起来很麻烦;抽取对象的共性类型,对该类型的事情进行指挥就会变得很简单;
        弊端:前期的程序虽然可以使用后期出现的子类内容,但是只能使用子类覆盖父类中的内容,不能使用子类中特有内容;

这样你就知道该在什么时候用了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马