多态性
在Java中对于多态性有两种实现的模式:
方法的多态性
方法的重载:同一个方法名称可以根据传入的参数类型和个数的不同,进行不同的处理。
方法的覆写:同一个方法可能根据使用子类的不同,由不同的实现。
对象的多态性
父子实例之间的转换处理,有两种模式:
对象向上转型
语法
父类 父类实例 = 子类实例、自动完成转换; 即子类只有一个父类,无歧义,直接转。
功能(使用场景)
可以对参数进行统一的设计,如下
public class JavaDemo {
public static void main(stringargs[]) {
fun(new DataBaseMessage ()) ; //DataBaseMessage 是 Mesrage的一个子类
MessaMessafun(new WebServerMessage ()) ; // WebServerMessage 也是 Mesrage的一个子类
public static void fun(Mesrage msg){ // 不管传递的是哪个类型的子类都能实现接收,且覆写的方法依旧有用
msg.print()
}
上面的代码,对于许多子类公用的同一个方法而言,将参数定位为他们共同的父类,可以提高代码的可拓展性。(当然,你可以选择对每个子类都分别写一个重载的方法,但是如果子类数量过多,该方法不利于扩展。)
对象向下转型
语法
子类 子类实例 = (子类) 父类实例、强制完成转换; 即父类向下走的时候,可能有很多子类,使用要在前面有指定是哪个子类。
功能(使用场景)
为了使用子类的特殊定义,即子类实例化对象在一般情况下是父类类型,但需要时可以转化为子类类型来使用。
注意
在使用向下转型前,一定要首先发生向上转型。因为如果直接用一个父类实例化的对象,其并不清楚向下的子类的存在。
instanceof 关键字
为了保证向下转型的正确性,故需要在转型之前判断某个实例是否是某个类的对象,此时就需要通过 instanceof 关键字来进行判断。
语法: 对象 instanceof 类