Java中的多态是什么?

多态指的是相同类型的变量在调用同一个方法时呈现出多种不同的行为特征。而造成这一现象的原因在于Java中的变量有两个类型: - 编译时类型,由声明变量时的类型决定。 - 运行时类型,由实际赋值给变量的对象的类型决定, 当一个变量的两个类型不一致,就会出现多态。 ```java //BaseClass是SubClass的父类 BaseClass a = new BaseClass(); BaseClass b = new SubClass(); a.baseMethod()//变量a调用baseMethod()方法,实际上会调用BaseClass的baseMethod()方法,会打印111 b.baseMethod()//变量b调用baseMethod方法,实际上会调用SubClass的重写baseMethod()方法,会打印222 Class BaseClass { void baseMethod() { System.out.println("111"); } } Class SubClass { void baseMethod() { System.out.println("222"); } } 输出结果: 111 222 ``` 例如这个例子中, 对于变量a而言 a的编译类型是BaseClass,实际类型也是BaseClass,所以调用baseMethod()会执行BaseClass#baseMethod()方法,打印出111。 对于变量b而言 b的的编译类型是BaseClass,但是实际赋值时,给变量b赋值的是SubClass对象,所以b的实际类型是SubClass。而SubClass重写了父类BaseClass#baseMethod()方法,所以调用baseMethod()方法会调用SubClass#baseMethod(),从而打印出222。 a和b的编译类型相同,却展现出了不同的行为特征,这就是多态。 (PS:如果直接对b调用只有SubClass有的方法,编译时会报错,但是可以通过反射进行调用。)