一、多态的概念
多态是面向对象编程的三大特性之一(即封装、继承、多态),指同一行为具有多种表现形式。具体表现为:父类引用指向子类对象,调用方法时根据实际对象类型决定执行哪个方法。
二、多态的实现条件
1、继承关系:必须存在父类和子类的继承关系。
2、方法重写:子类需重写父类的方法。
3、向上转型:父类引用指向子类对象,例如:
Test01 test01= new Test01(); // Test是父类,Test01是子类
Test test=test01;
三、多态的表现形式
1、编译时类型与运行时类型不同,编译时类型由声明决定(如Test),运行时类型由实际对象决定(如Test01)。
2、方法调用动态绑定,在调用重写方法时,系统会根据运行时类型决定执行哪个方法。
四、注意事项
1、无法调用子类特有方法,父类引用只能调用父类中定义的方法,如果需调用子类特有方法,需强制向下转型。例如:
if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.specificMethod();
}
注:instanceof关键字用于判断animal变量引用的是否为Cat类的对象。
2、成员变量无多态,多态仅针对方法,成员变量的访问由编译时的类型决定。
六、代码示例
class Animal {
public void makeSound() {
System.out.println("山里有很多动物的叫声");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("芝士狗叫");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("芝士猫叫");
}
}
public class PolymorphismDemo {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // Animal对象
Animal myDog = new Dog(); // Dog对象向上转型为Animal
Animal myCat = new Cat(); // Cat对象向上转型为Animal
myAnimal.makeSound(); // 输出: 山里有很多动物的叫声
myDog.makeSound(); // 输出: 芝士狗叫
myCat.makeSound(); // 输出: 芝士猫叫
}
}
890

被折叠的 条评论
为什么被折叠?



