有了多态的存在,instanceof存在的价值在什么地方

public  interface  Base{
  public  void  base();
}
class  Child1  extends  Base{
   public  void  base(){}   //实现接口方法
   public  void  a(){}    //两个子类,方法不同,也中是重写父类的方法
}
class  Child2  extends  Base{
   public  void  base(){}   //实现接口方法
   public  void  b(){}    //两个子类,方法不同,也中是重写父类的方法
}
public  class  Other{
   public  static  void  main(String[] args){
       
   }
   public  static  calc(Base b){
      b.base();    //调用接口方法
       if  (b  instanceof  Child1){
         ((Child1)b).a();     //为了转型安全,使用intanceof 先判断是不是Child1的对象
       }
      else  if  (b  instanceof  Child2){
         ((Child2)b).b();     //为了转型安全,使用intanceof 先判断是不是Child2的对象
       }
   }
}
向上转型,会隐藏对象的型别信息,在实际应用时,需要绑定到具体的型别,即向下转型。这时候,instanceOf就有了用武之地。

必须使用instanceof的情况,假设类A有两个子类B和C,需要运行时根据类B或C的对象来执行不同的逻辑,这种情况就必须用instanceof。较常出现这种情况是当使用Vector,由于其内部存储的是Object,需将其向下转型才能正常使用。此外解决这类问题还有一种方式就是使用try/catch语句块,不过一般的情况不建议使用try/catch语句块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值