多态
多态是同一个行为具有多个不同表现形式或形态的能力。
简单的可以理解为同一个事件发生在不同的对象上会产生不同的结果。比如电话可以分为座机和移动电话
- 代码当中体现多态性,就是一个句话,父类引用指向子类对象
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
变量名.方法名();
多态访问成员变量
- 直接通过对象名称访问成员变量: 看等号左边是谁,优先用谁,没有则向上找
- 间接通过成员方法访问成员变量: 看该方法属于谁,优先用谁,没有向上查找
多态访问成员方法
- 看new的是谁,就优先用谁,没有则向上查找
注意
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写 后方法。
演示
- 父类
public abstract class Animal {
public abstract void eat();
}
- 子类
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
- 测试类
public class Test {
public static void main(String[] args) {
// 多态形式,创建对象
Animal a1 = new Cat(); // 调用的是 Cat 的 eat
a1.eat(); // 多态形式,创建对象
Animal a2 = new Dog();
// 调用的是 Dog 的 eat
a2.eat();
}
}