java多态

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。

编译时类型由声明该变量时使用的类型决定。
运行时类型由实际赋给该变量的对象决定。

如果编译时类型和运行时类型不一致,就会呈现多态

本文包含:

  1. 多态性
  2. 引用变量的强制类型转换
  3. instanceof运算符

1. 多态性

在下面的代码中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中第三个引用变量polumophicBc其编译时类型是BaseClass,运行时类型是SubClass,当调用该引用变量的test()方法(BaseClass类中定义了该方法,子类SubClass覆盖了父类的该方法)时,实际执行的是SubClass类中覆盖后的test()方法,就会出现多态
在这里插入图片描述
上面main方法最后一句polymophicBc.sub();在编译时会引发错误,虽然polymophicBc引用变量实际上包含了sub()方法,但因为编译时类型为BaseClass,因此编译时无法调用sub()方法。

对象的实例变量不具备多态性,上面的polymophicBc引用变量输出其book实例变量时,输出的是BaseClass类的实例变量。
在这里插入图片描述

2. 引用变量的强制类型转换

在这里插入图片描述
类型转换运算符可以将一个引用类型变量转换成其子类类型。
当进行强制类型转换时需要注意:
在这里插入图片描述
以下举例说明:

如下数值类型和布尔类型之间不能进行类型转换
在这里插入图片描述
如下Object和String存在继承关系,可以强制类型转换
在这里插入图片描述
如下Integer类型和String类型不存在继承关系,强转会发生ClassCastException异常
在这里插入图片描述
在这里插入图片描述

3. instanceOf运算符

instanceof 运算符的
前一个操作数通常是一个引用类型变量,
后一个操作数通常是一个类(也可以是一个接口,可以把接口理解成一种特殊的类),
它用于判断前面的对象是否是后面的类、或者其子类、实现类的实例。如果是,返回 true,否则,返回 false。

注意:instanceof 运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。

下面有代码示例说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值