多态性.
可理解为一个事物的多种形态
- 父类的引用指向子类对象(或子类的对象赋给父类的引用)
多态的使用.
虚拟方法调用.
当调用子父类同名的方法时,实际执行的是子类重写父类的方法
父类根据子类更据赋给它的不同子类对象,动态调用属于子类的方法
这样的方法调用在编译期是无法确定的
多态性是运行时行为
- 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法(
编译看左边,运行看右边
) - 多态性只适用于方法,不适用与属性(
编译运行都看左边
) - 不能调用子类中特有的方法
class B {
int field = 1;
public void method() {
System.out.println("父类方法");
}
}
public class A extends B{
int field = 2;
@Override
public void method() {
System.out.println("子类重写父类的方法");
}
public static void main(String[] args) {
//对象的多态性
B a = new A();
//多态的使用:当调用子父类同名的方法时,实际执行的是子类重写父类的方法 ---- 虚拟方法调用
System.out.println(a.field);// 1
a.method();//调用的方法是子类重写父类后的方法
//如果你 Ctrl + 鼠标左键点击这个方法它会跳到,父类的method,但是执行的内容是子类的method方法
//所以说 编译看左边(父类对象里的方法) 执行看右边(子类重写的方法)
}
}
多态性的使用前提.
- 继承
- 方法重写