一丶问题显现:

  当你是父类的情况下,像使用子类的特定功能,就需要向下转型,但向下转型有可能会报错(ClassCastException)

  而instanceof关键字就是解决异常的小能手,他能判断是否能转型

二丶解决方法:

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:

变量名 instanceof 数据类型 
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

所以,转换前,我们最好先做一个判断,代码如下:

public class Test {
   public static void main(String[] args) {
       // 向上转型  
       Animal a = new Cat();  
       a.eat();               // 调用的是 Cat 的 eat

       // 向下转型 的判定
     // a父类 判断 Cat子类
       if (a instanceof Cat){      
     // 向下转型(强转)
     Cat c = (Cat)a;      
     c.catchMouse();// 调用的是 Cat 的 catchMouse
        } else if (a instanceof Dog){
           Dog d = (Dog)a;      
           d.watchHouse();       // 调用的是 Dog 的 watchHouse
      }
  }  
}

三丶总结:

    在向下转型时使用

    注意父类和子类的位置

    判断完记得强转

最新文章

  1. css3 linear-gradient实现购物车地址选择信封效果
  2. linux系统swappiness参数在内存与交换分区间优化
  3. 关于jsp的内置对象request和response的重定向和转化(待补充)
  4. 重拾Blog
  5. 使用Apache Archiva搭建Maven Repository Server
  6. Android开发笔记
  7. Reading WebSites
  8. linux正则表达式使用
  9. JAVA中抽象类的一些总结
  10. token验证-微信公众平台开发3(asp.net)
  11. php关联不上mysql解决办法
  12. Effective Java:Ch4_Class:Item14_在public类中应该使用访问方法而不是public域
  13. WIn7下Ubuntu 14.04 安装
  14. 201521123090《Java程序设计》第1周学习总结
  15. node的第一步,hello,以及小技巧和CPU使用情况。到底能用几个核心?
  16. 【Unity】微软的一款依赖注入组件
  17. Docker学习笔记-两种发布方式
  18. 谢大神给的C++和C# DES加解密代码
  19. LINQ to Entities 比较日期
  20. ruby中字符串转换为类

热门文章

  1. 使用Irony开发译码器
  2. 革命性创新,动画杀手锏 @scroll-timeline
  3. 微服务从代码到k8s部署应有尽有系列(十二、链路追踪)
  4. Laravel-QueryList-采集
  5. php 23种设计模式 - 责任链模式
  6. CF416E题解
  7. ENVI提取水系并进行生态敏感性分析
  8. 深入了解ReentrantLock中的公平锁和非公平锁的加锁机制
  9. Termux镜像在阿里云镜像站首发上线
  10. 配置Pouch镜像