举个例子,显示鸟的飞行动作
对于八哥鸟,你可以这样new Myna().fly();
对于鹦鹉,你可以这样new Parrot().fly();
对于孔雀,你可以这样 new Peacock().fly();
。。。
对于每一个具体的鸟,你都必须调用具体的鸟类对象。
现在使用多态再来看看。
我们先写一个Bird类,用来抽取出鸟类的飞行动作。
public abstract class Bird {
public void fly() {
System.out.println("default bird fly!");
}
}
再写具体的鸟类,继承Bird类
class Parrot extends Bird {
@Override
public void fly() {
System.out.println("Parrot fly");
}
}
class Myna extends Bird {
@Override
public void fly() {
System.out.println("Myna fly");
}
}
现在再来看一下八哥和鹦鹉的飞行动作。
public static void main(String args[]) {
Bird bird = new Parrot();
bird.fly();
bird = new Myna();
bird.fly();
}
这样,同一个Bird的实例对象实际对调用的是八哥和鹦鹉的飞行动作。
假如这样还不清楚。那么现在有一个flyPerform()方法,显示具体的鸟的飞行行为。
flyPerform(Bird bird){
bird.fly();
}
那么你就可以这样
flyPerform(new Parrot());
flyPerform(new Myna());
假如现在又有了一种新的鸟,NewBird那么我们只需要将new NewBird作为参数传入flyPerform方法即可,而不需要去修改这个方法的代码。
这是一个比较粗糙的例子,要不你仔细琢磨看看?
对于这个推荐答案,我不是很认同,
在java里面多态一般指的是运行时多态,重载多态是通过方法签名实现的,同一个方法名,但是要求参数必须不一样,这个在编译期间就可以确定调用的是哪个方法。
重载多态在C++上说的比较多些吧。
多态在两方面有体现:
继承多态
同一种抽象的东西在具体的类型中有不同的表现。比如大多数动物(抽象类)会叫,但是狗(实现类)就是汪汪汪,猫(实现类)就是喵喵喵
或者是具有包含关系需要修改表现,比如物品(父类)具有现实详细信息的功能,但是书籍(子类)显示详细信息中可能还要包含书籍本身特有信息比如页数、作者等等,这也是多态。
重载多态:同一个方法名在不同类型不同数量的参数传入需要有不同的表现。
这个在构造方法上用的挺多,一般来说类都会有一个无参构造方法,还有不定的几个有参构造方法,这是因为在编程期间需要调用不同的构造方法来产生不同的类。比如无参的就吧所有属性置为默认值,有参的就用参数去初始化属性等
使用多态就是用父类类型屏蔽子类差异,使程序更加简单通用,例如:我定义一个Animal的父类,然后再定义一个Dog和Cat的子类,当我想应用Dog的对象时,可以用父类的Animal指向Dog子类,这样就屏蔽掉了子类中的差异
java语言本身是不支持多态的,但是可以使用interface实现类似多态。
多态就是继承的表现形式。
爸爸的3个儿子 各自长的不一样,这就是多态