多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同的操作。举个例子:当我们打印一份资料时,打印机就相当于一个接口,而彩色打印和黑白打印就是两个不同的实例,选择不同的打印方式,就会打印出不同的打印效果。
1.多态存在的条件
要有继承或实现(接口)关系;方法的重写;父类引用指向子类对象,例如:Parent p = new Child();
2.多态的分类
具体类多态
class Parent{}
class Child extends Parent{}
Parent p= new Child();
抽象类多态
abstract class Parent{}
class Child extends Parent{}
Parent p= new Child();
接口多态
interface Parent{}
class Child implements Parent{}
Parent p= new Child();
3.多态示例
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
示例代码:
public class demo {
public static void main(String[] args) {
show(new Sheep());
show(new Dog());
Animal animal=new Sheep();//向上转型
animal.eat();
Sheep sheep=(Sheep)animal;//向下转型
sheep.sound();
}
public static void show(Animal animal) {
animal.eat();
// 类型判断
//instanceof:判断一个对象是否属于指定的类别
//instanceof的使用前提:判断的对象与指定的类别必须要存在继承或实现的关系
if (animal instanceof Sheep) {//羊的叫声
Sheep sheep = (Sheep)animal;
sheep.sound();
} else if (animal instanceof Dog) {//狗的叫声
Dog dog = (Dog)animal;
dog.sound();
}
}
}
abstract class Animal {
abstract void eat();
}
class Sheep extends Animal {
@Override
void eat() {
System.out.println("吃草");
}
public void sound() {
System.out.println("咩咩咩");
}
}
class Dog extends Animal{
@Override
void eat() {
System.out.println("啃骨头");
}
public void sound() {
System.out.println("汪汪汪");
}
}
运行结果截图: