- Java引用变量有两种类型,分别是编译时类型和运行时类型:编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象。如果编译时类型和运行时类型不一致,就可能出现所谓多态。
- 如果子类没有重写父类的方法或者没有调用重写的方法,那么不会出现多态。
- 出现多态的条件有三个:继承、重写、调用
- 多态:多态是一种现象,描述的是父类类型的变量指向子类的实例化对象,在调用父类中被子类重写的方法时,在编译时指向的是父类中被子类重写的方法,而在运行时则指向子类中重写父类的方法,例:
class Animal{ public void howl() { System.out.println("动物吼叫。。。"); } } class Dog extends Animal{ @Override public void howl() { System.out.println("汪汪汪汪。。。"); } } public class Test { public static void main(String[] args) { Animal dog = new Dog(); dog.howl(); //运行结果:汪汪汪汪。。。 } } - 因为变量dog的类型是Animal类,在编译时不会创建对象,因此使用变量dog调用的howl()方法指向的是Animal类中的howl()方法
- 运行时,关键字new在堆中创建了一个Dog实例化对象,然后又把该对象的地址赋值给了变量dog,因此dog指向的其实是刚刚产生的Dog的实例化对象,调方法howl()用的howl()方法时也就自然是Dog中的howl()方法
来源:https://blog.csdn.net/qq_43705275/article/details/102776589