多态:就是对同一个对象在不同时刻表现的不同形态(比如例子中的猫可以是一只猫也可以是一个动物)
一、多态的前提条件
- 有继承关系或者有实现关系
- 方法要有重写
- 父类引用指向子类对象
class Animal {
public void eat(){
System.out.println("动物吃饭");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test1 {
public static void main(String[] args) {
// 当前事物, 是一只猫
Cat cat = new Cat();
// 当前事物, 是一只动物
Animal animal = new Cat();
animal.eat();
}
}
二、多态访问特点
- 成员变量:编译看父类,运行看父类
- 成员方法:编译看父类,运行看子类
总结就是:编译看左边,运行看右边
例子:
class Fu {
int num = 10;
public void method(){
System.out.println("父类方法执行");
}
}
class Zi extends Fu {
int num = 20;
public void method(){
System.out.println("子类方法执行");
}
}
public class Demo01 {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.method();
}
运行结果:
成员变量的编译和运行都是父类,例子中的父类成员变量为int = 10,成员方法是编译看父类,运行看子类,所以子类的方法运行(前提是子类有父类的方法重写)