首页 > 其他 > 详细

instanceof在类实现接口中的使用

时间:2020-12-13 20:48:11      阅读:60      评论:0      收藏:0      [点我收藏+]

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

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

 1 boolean result = obj instanceof Class; 

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

看以下示例:

 

 1 public class Test1 {
 2     public static void main(String[] args) {
 3         Y y = new Z();
 4   /*   y instanceof  X    //obj instanceof class,obj是一个引用数据类型,class是一个类名或者接口
 5                           //当obj是class的对象,或者是其直接/间接子类,或者是其接口的实现类,为真返回true,否则false
 6         */
 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 instanceof U) {
13             U u = (U) y;
14         }
15     }
16 }
17 interface U {
18 }
19 interface X {
20 }
21 interface Y {
22 }
23 class Z implements X, Y {
24 }

 

 

 

 运行结果:

技术分享图片

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

1 Y y = new Z(); 

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

 

1 System.out.println(y instanceof X);//y作为引用,指向了Z的实例化对象,Z实现了X,则y也是X的实例化。
2 X x = (X) y;
3 System.out.println(y instanceof Y);//同理,Z实现了Y,则y也是Y的实例化
4 Y y1 = (Y) y;

第1行必须输出true,第2行才能运行;第3行输出true,第4行才能运行。

 

1  if (y instanceof U) {
2             U u = (U) y;
3         }

这里,由于y instanceof U = false,根本无法写成上面四行的形式,必须用if语句写,否则会出现ClassCastException异常错误,即不能执行这里的第2行代码,这里的异常现象开头说过了。

 

instanceof在类实现接口中的使用

原文:https://www.cnblogs.com/zl-00/p/14129097.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!