Java子类与父类之间的类型转换

1.向上转换

父类的引用变量指向子类变量时,子类对象向父类对象向上转换。从子类向父类的转换不须要什么限制,只需直接蒋子类实例赋值给父类变量便可,这也是Java中多态的实现机制。spa

2.向下转换

在父类变量调用子类特有的、不是从父类继承来的方法和变量时,须要父类变量向子类转换。对象

为何要向下转换?

  在继承关系中,有一些方法是不适合由父类定义并由子类继承并重写的,有些方法是子类特有的,不该该经过继承获得,且子类可能也会有本身特有的成员变量,那么在使用多态机制的时候,若咱们要经过父类型变量使用到这些子类特有的方法和属性的话,就须要将服类型变量转换成对应的子类型变量。一个典型例子即是标准库中的数据类型包装类:Integer类,Double类,Long类等,它们都继承自Number类,且它们都有一个方法叫作compareTo用于比较两个一样的类型。然而这个方法是这些子类经过实现Comparable接口来实现的,在Number类中并无该方法的实现,所以若要经过Number类型变量来使用compareTo方法,就要先将Number类转换成子类的对象。继承

注意

  父类变量向子类转换必须经过显式强制类型转换,采起和向上转换相同的直接赋值方式是不行的;而且,当把一个父类型变量实例转换为子类型变量时,必须确保该父类变量是子类的一个实例,从继承链的角度来理解这些缘由:子类必定是父类的一个实例,然而父类却不必定是子类的实例。在进行父类向子类的转换时,一个好的习惯是经过instanceof运算符来判断父类变量是不是该子类的一个实例,不然在运行时会抛出运行异常ClassCastException,表示类转换异常。接口

相关文章
相关标签/搜索