一、多态的概念
1.1 什么是多态
多态:同样的引用调用同样的方法却做了不同的事情。
通俗来讲,多态就是指一个事物有不同表现形式。比如水有固态,液态,气态三种形态。
1.2 多态的实现格式
父类类型 对象名=new 子类名称();
注:
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
例如:
//Teacher继承自Person类
Person peo=new Teacher()
二、举例
在Java中实现多态,一般使用一个父类类型的变量来引用一个子类类型的对象,然后根据被引用子类对象特征的不同得到不同的运行结果。
通过一个程序来演示:
public class Test1 {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
animalShout(dog);
animalShout(cat);
}
// 定义一个静态的animalShout()方法,接收一个Animal类型的对象
public static void animalShout(Animal animal) {
animal.shout();// 调用实际参数的shout()方法
}
}
//有抽象方法的类也必须被声明为abstract
abstract class Animal {
public abstract void shout(); // 定义抽象shout()方法
}
//定义Cat类继承Animal
class Cat extends Animal {
// 实现shout()方法
public void shout() {
System.out.println("喵喵喵...");
}
}
//定义Dog类继承Animal
class Dog extends Animal {
// 实现shout()方法
public void shout() {
System.out.println("汪汪汪...");
}
}
运训结果:
汪汪汪...
喵喵喵...
Animal cat = new Cat(); //将Cat对象当作Animal类型来使用
Animal dog = new Dog(); //将Dog对象当作Animal类型来使用
两行代码实现了父类类型变量引用不同的子类对象。
调用animalShout()方法时,将父类引用的两个不同子类对象分别传入,结果打印出了“汪汪汪…”和“喵喵喵…”。
此外,Java提供了一个instanceof关键字来判断一个对象的类型,其使用格式如下:
对象(或对象的引用变量) instanceof 类(或接口)
利用instanceof进行类型判断的好处就是避免了强制类型转换过程中类型不匹配的错误。
由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵括,从而有效地提高程序的可扩展性和可维护性。