一、多态的定义
不同类的对象,对同一个消息做出响应,即同一个消息可以根据发送对象的不同而采取多种不同的行为方式。
二、多态的分类
主要可以分为两类:
静多态:编译期间确定的,主要是指方法的重载。
动多态:执行器确定的,通过动态绑定来实现的,就是指在执行期间判断所引用对象的实际类型,根据其实际类型调用其对应的方法。
三、实现多态的必然条件
条件一:继承:在多态中必须存在有继承关系的子类和父类。
条件二:重写:子类对父类的某些方法进行重新定义,在调用这些方法的时候就会调用子类的方法。
条件三:向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能具备调用父类的方法和子类的方法的技能。
只有满足上述的三个条件,才能够在同一继承结构中使用统一的逻辑处理不同的对象,执行不同的行为。
四、多态的实现形式
Java中有两种形式可以实现多态:继承和接口。
1、基于继承实现的多态
主要表现在父类和继承该父类的一个或者多个子类对某些方法的重写,多个子类对同一个方法的重写可表现出不同的行为。
代码演示:
class Animal{
public void eat(){
System.out.println("Animal");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("eat");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog");
}
}
总结:对于引用子类的父类对象,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同的动作产生的行为也不同。
2、基于接口实现的多态
在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行相应的方法。
五、instanceof运算符
它主要指的是强制转换的意思。
代码演示:
Person p=new student();
if(p instanceof student){ //将p转换为student类型可以吗???
student s=(student)p;
}