多态:同一个对象拥有多种形态
作用:把不同数据类型进行统一
补充:
-
把子类对象赋值给父类变量: 向上转型
缺点:屏蔽掉子类中特有的方法
-
把父类变量转换回子类变量 :向下转型
(向下转型有可能有风险)
java要求向下转型必须写强制类型转换 (转换之后的变量)变量
public class Animal {
public void eat() {
System.out.println("动物在吃");
}
}
public class Person {
public void feed(Animal a) { //接收到的所有动物都是animal
a.eat();
}
}
//猫是一种动物,继承
public class Cat extends Animal{
public void eat() {
System.out.println("猫喜欢吃鱼");
}
public void zhua() {
System.out.println("猫喜欢抓老鼠");
}
}
public class Dog extends Animal{
public void eat() {
System.out.println("狗喜欢吃骨头");
}
}
public class Spot {
public static void main(String[] args) {
Animal a1 = new Cat(); //可以把猫当成动物来看,把子类对象赋值给父类的引用:向上转型,但会屏蔽掉子类的特有方法
Animal a2 = new Dog();
Person p = new Person();
p.feed(a1);
p.feed(a2);
//多态作用:把不同数据类型进行统一(把猫狗转换为动物型)
// a1.zhua(); 此时的猫为动物态,不具备抓老鼠特质
Cat cc = (Cat)a1; //向下转型
cc.zhua(); //猫又可以抓老鼠了
}
}