Java中instanceof关键字的使用

instanceof关键字的使用

  1. a instanceof A : 判断对象a是否是类A的实例。如果是,返回true。不是返回false。

通过if语句判断来确定是否执行

if(p2 instanceof Woman){
	Woman w1 =(Woman)p2;
	w1.goShopping();
}

通过判断p2是否是Woman类的实例来将p2强制转换

  1. 使用情景:为了避免在向下转型时出现ClassCastException的异常,在转型之前进行instancof的判断,如果为true,进行向下转型。如果返回false,则不进行向下转型。

  2. 当B是A的父类的前提下,如果 a instanceof A 返回的是true,则 instanceof B也返回true

常见问题:

  1. 编译时通过,运行时不通过

    例1

//Person是父类 Man Woman 为Person的子类
Person p3 = new Woman();
Man m3 = (Man)р3;

思考过程: p3是Woman的对象含有Woman的属性,此处定义为属于person类中的实例。但是Woman中的方法和属性与Man类没有干系,因此无法强制转换。

例2

Person p4 = new Person();
Man m4 = (Man)p4;//报错
m4.earnMoney();//不通过

首先要认清强制转换的是类,让p4转换成Man类,而仍居于Person的属性和方法。如果通过后,那么Man中的属性和方法也可以调用,又因为是Person()的对象,只含有person()中的方法属性,不含有Man中的。因此不可强制转换。

记住多态的使用!:多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法,能调用的都是子父类共有的方法。Man也不是Person的父类!因此出错!

  1. 编译运行都通过
 Object obj = new Woman(); 
 Person p= (Person)obj;
  1. 编译直接不过
Man m5 = new Woman()//类型不匹配 不存在父子类

即不相关的两个类不可以转型!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值