黑马程序员技术交流社区
标题:
关于多态的问题
[打印本页]
作者:
刘占月
时间:
2012-3-31 12:43
标题:
关于多态的问题
谁能给讲讲什么时候应用多态啊?
作者:
秦岩
时间:
2012-3-31 13:01
多态有编译时多态 和运行时多态。
第一个是通过方法重载实现;第二个是通过方法覆盖实现(子类覆盖父类方法)。
第一种就是我们调用方法是不用区分参数类型,程序会自动执行相应方法,如: 加法运算,可以使int相加,可以是double相加,都是同一个方法名。
第二种就是动态绑定,使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了父类中的跑方法,各自有自己的现实,表现出来多态。 如果有一天你想再加个角色,只用再写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好。
作者:
izwj
时间:
2012-3-31 13:25
多态的好处:
1.可替换性。多态对已存在的代码具有可替换性。
2.可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
3.接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性。多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。
作者:
邵中国
时间:
2012-3-31 13:40
ye知道什么好处就知道什么时候用了
作者:
如梦初醒
时间:
2012-3-31 23:35
多态就是父类引用可指向子类对象
作者:
黄方
时间:
2012-3-31 23:40
多态是将子类对象抽象成父类的引用。我就举一个例子吧:
现在有一个表示动物的类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());
作者:
陈苓
时间:
2012-4-1 09:52
首先得先知道多太的体现前提好处和弊端:
体现:父类或者接口的引用指向了自己的子类对象;
前提:必须要有关系,1、继承,2、实现;3,必须有覆盖的操作;
好处:提高了程序的扩展性,有了多态,前期设计好的内容可以使用后期出现的子类内容;对与指挥对象做事情的这件事,如果对象很多指挥起来很麻烦;抽取对象的共性类型,对该类型的事情进行指挥就会变得很简单;
弊端:前期的程序虽然可以使用后期出现的子类内容,但是只能使用子类覆盖父类中的内容,不能使用子类中特有内容;
这样你就知道该在什么时候用了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2