动态绑定是指“在执行期间(而非编译期)”判断所引用对象的实际类型,根据其实际的类型调用其相应的方法
多态的条件:
- 要有继承
- 要有重写
- 父类引用指向子类对象(里氏转换)
里氏转换之后,对象只能用父类的方法,但是因为有了重写,就可以new谁,就用谁的方法(方法在code segment里面,不在堆里面)
public class Test{
public static void main(String args[]){
Animal a=new Bird();
a.enjoy();
}
}
class Animal{
public void enjoy() {
System.out.println("动物非常的舒服");
}
}
class Bird extends Animal {
public void enjoy() {
System.out.println("小鸟非常的舒服");
}
}
输出结果:小鸟非常的舒服
(PS:属性不能被重写)