MENU

Java-28 子父类之间的类型转换&instanceof关键字

September 22, 2023 • Read: 68 • Java阅读设置

面向对象编程

子父类之间的类型转换

1 什么是子父类之间的类型转换

如字面含义,子父类之间的类型转换是两种类型转换情况:

  • 子类型的变量转换为父类型的变量;
  • 父类型的变量转换为子类型的变量。

2 如何实现子父类之间的类型转换、

实现子父类之间的类型转换是利用类似于强转符的方式,其格式为:

  • 父类型变量b转为子类型变量a:SubClass a = (SubClass)b
  • 子类型变量a转为父类型变量b:SuperClass b = (SuperClass)a

3 实现子父类之间的类型转换的注意点

  • 在编译层面,利用强制类型转换的方式实现变量的类型转换,只对具有子父类关系的变量有效。
    换句话说,没有子父类关系的变量之间利用这种强制方式转换类型,会出现编译错误。
  • 真正能够实现子父类之间的类型转换的关键是,要转换的变量对应的实例化对象,该实例化对象具备哪种类型的定义,就能够转换为哪种类型。
    因此,子类一定可以转换为任何父类,因为子类具备父类的所有成员,也就是具备父类的定义,这也是多态的要求。
    而父类要想真正实现向子类的转换,该父类变量对应的实例化对象一定是具备子类的定义,否则,转换会在运行时报错。

4 子父类之间的类型转换的应用

在多态的情况下,有的子类的实例化对象会被赋给父类变量,由于该变量的值是new的子类,因此该变量虽然是父类类型,但本质上拥有了子类的所有定义,但由于类型的限定,是无法使用子类的成员的(除了重写的方法)。

有时,需要摆脱这种类型的限定,去使用自己具备但由于类型而不能使用的成员,通过子父类之间的类型转换可以实现类型之间的切换,也就可以实现对子父类的成员的使用的切换。

5 示例

2023-09-22T13:39:13.png
2023-09-22T13:39:24.png
2023-09-22T13:39:34.png

instanceof关键字

1 instanceof关键字

instanceof关键字是用于判断变量或对象的类型,其使用格式为:变量名或对象 instanceof 类名

instanceof是一个二元运算符,其返回值为boolean类型,使用时需注意:

  • instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误。
  • instanceof不能用于对基本数据类型的判断。
  • instanceof左边可以是null。

2 instanceof关键字的判断依据

只要其判断的对象或变量名对应的对象,具备其判断的类型的定义,即具备对应的成员,则返回true

3 instanceof的使用场景

主要就是在子父类之间的类型转换时,由于子父类之间的类型转换在编译时会通过,但不一定真正的能够转换,也就是可能会在运行时报错,这时可以利用instanceof关键字在转换之前先判断,以避免出错。

Last Modified: October 18, 2023