Java面向对象—多态 一、概念:父类引用指向不同的子类对象,从而产生的多种形态 例: class Animal { public void eat() { System.out.println("动物在吃"); } public void run() { System.out.println("动物在跑"); } public void sleep(){ System.out.println("动物在睡觉"); } public void swiming(){ System.out.println("动物在游泳"); } } class Dog extends Animal{ public void eat() { System.out.println("狗在啃骨头"); }
public void run() {
System.out.println("狗在跑");
}
public void sleep(){
System.out.println("狗在睡觉");
}
public void swiming(){
System.out.println("狗在游泳");
}
} class cat extends Animal{ public void eat() { System.out.println("猫在吃鱼"); } public void run() { System.out.println("猫在跑"); } public void sleep() { System.out.println("猫在睡觉"); } } public class test{ public static void main(String[]args){ Animal a=new Dog(); Animal b=new cat(); a.eat(); b.eat(); } } 输出:狗在啃骨头 猫在吃鱼 二、特点:(1)子类对象类型始终不变。 (2)编译时只能调用父类引用类型中声明的方法。 (3)运行时,如果子类覆盖父类的方法,则执行子类覆盖的方法。 三、类型转换 (1)子类对象赋值给父类引用。 Animal a=new Dog(); (2)父类引用赋值给子类引用赋值(向下转型,前提是父类引用的对象是这个子类类型) Animal a=new Dog(); Dog d=(Dog)a; 四、instanceof关键字 作用:判断引用类型中存放的对象是否为指定类型。 语法:引用 instanceof 类名 (结果为Boolean类型) 例:if(a instanceof Dog){ System.out.println("a是Dog类型"); }else { System.out.println("a不是Dog类型"); } 输出:a是Dog类型 多态的作用:(1)屏蔽子类之间的差异。 (2)利于拓展降低程序之间的耦合。