概述
理解:同一个事件发生在不同的对象上会有不同的结果
Java中的多态定义
多态指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态性就是对象多种表现形式的体现。
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
优点
可替换性、可扩充性、简洁性、灵活性、接口性
多态的类型转换
向上转型 | 限制对持有功能的访问 |
向下转型 | 使用子类中的特有方法 |
instanceof | 判断对象的具体类型 |
示例:
package text;
import text.entity.Cat;
import text.entity.Dog;
/**
* @ClassName : PolymorphicDemo
* @Description : PolymorphicDemo
* @Author : mt
* @Date: 2023-08-04 18:02
*/
public class PolymorphicDemo {
public static void main(String[] args) {
//调用
Cat c = new Cat();
method(c);
method(new Dog()); //Dat d = new Dat()
}
public static void method(Cat c){
c.eat();
}
public static void method(Dog d){
d.eat();
}
}
package text.entity;
/**
* @ClassName : Animal02
* @Description : Animal02
* @Author : mt
* @Date: 2023-08-04 17:50
*/
public abstract class Animal02 {
abstract void eat();
}
package text.entity;
/**
* @ClassName : Cat
* @Description : Cat
* @Author : mt
* @Date: 2023-08-04 17:48
*/
public class Cat extends Animal02{
public void eat(){
System.out.println("吃鱼");
}
public void catchmouse(){
System.out.println("抓老鼠");
}
}
package text.entity;
import org.omg.Messaging.SyncScopeHelper;
/**
* @ClassName : Dog
* @Description : Dog
* @Author : mt
* @Date: 2023-08-04 17:49
*/
public class Dog extends Animal02{
public void eat(){
System.out.println("啃骨头");
}
public void lookhome(){
System.out.println("看家");
}
}
示例:父类的引用指向子类
package text;
import text.entity.Animal02;
import text.entity.Cat;
import text.entity.Dog;
/**
* @ClassName : PolymorphicDemo
* @Description : PolymorphicDemo
* @Author : mt
* @Date: 2023-08-04 18:02
*/
public class PolymorphicDemo {
public static void main(String[] args) {
//调用
// Cat c = new Cat();
// method(c);
// method(new Dog()); //Dat d = new Dat()
//父类的引用指向子类
Animal02 c = new Cat();
method(c);
method(new Dog());
}
public static void method(Animal02 a){
a.eat();
}
public static Animal02 gaet() {
return new Dog();
}
}