instanceof java 接口_【Java】instanceof在类实现接口中的使用

最近刚开始学习java里的多态,老师提到了instanceof,后来讲到在接口的实现时,有些地方就不太理解了,先mark下,等以后学的深了在回顾下。

instanceof 是在使用多态时避免出现classcastException异常的一种手段,使用方式为

1 boolean result = obj instanceof Class;

其中,obj指的是对象,class为类或者接口,该表达式的含义为:当obj是class的对象,或者是其直接/间接子类,或者是其接口的实现类时,result为true,否则为false。

看以下示例:

1 public classTest1 {2 public static voidmain(String[] args) {3 Y y = newZ();4 /*y instanceof X //obj instanceof class,obj是一个引用数据类型,class是一个类名或者接口5 //当obj是class的对象,或者是其直接/间接子类,或者是其接口的实现类,为真返回true,否则false6 */

7 System.out.println(y instanceof X);//y作为引用,指向了Z的实例化对象,由于Z实现了X(见代码23行),则y也是X的实例化。

8 X x =(X) y;9 System.out.println(y instanceof Y);//同理,由于Z实现了Y(见代码23行),则y也是Y的实例化

10 Y y1 =(Y) y;11 System.out.println(y instanceof U);//Z和U没有实现关系,则不能

12 if (y instanceofU) {13 U u =(U) y;14 }15 }16 }17 interfaceU {18 }19 interfaceX {20 }21 interfaceY {22 }23 class Z implementsX, Y {24 }

运行结果:

dc2691f4859e5e58ca18c23f47d7bdf2.png

解释说明在上面代码的注释里已经解释了,解释可能存在有误的地方。这里再逐行具体解释下:

3 Y y = new Z();

这行表示,定义一个Y类型的变量y,指向Z类实例化后的对象,这里的变量y存放指向对象的地址,也是引用,是引用数据类型。

7 System.out.println(y instanceof X);//y作为引用,指向了Z的实例化对象,Z实现了X,则y也是X的实例化。

8 X x =(X) y;9 System.out.println(y instanceof Y);//同理,Z实现了Y,则y也是Y的实例化

10 Y y1 = (Y) y;

第7行必须输出true,第8行才能运行;第9行输出true,第10行才能运行。

12 if (y instanceofU) {13 U u =(U) y;14 }

这里,由于y instanceof U = false,根本无法写成上面四行的形式,必须用if语句写,否则会出现ClassCastException异常错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值