instanceof 和类型转换

instanceof

判断a 和 B 类型是否相似
公式 System.out.println(a instanceof B); //true / false
编译是否通过? (a的引用类型和B类型是否存在父子关系
编译通过之后结果true还是false(a指向的实际类型是否是B的子类型

//判断a 和 B 类型是否相似
//公式 System.out.println(a instanceof B); //true / false
//编译是否通过? (a的引用类型和B类型是否存在父子关系)
//编译通过之后结果true还是false(a指向的实际类型是否是B的子类型) //Object > String
//Object > Person > Teacher
//Object类 > Person类 > Student类 //引用类型为Object的引用变量object 指向的实际类型为 Student类型
Object object = new Student();
//判断引用变量object是否是Student类型 true
System.out.println(object instanceof Student); System.out.println(object instanceof Person);//true
System.out.println(object instanceof Object);//true
System.out.println(object instanceof Teacher);//false
System.out.println(object instanceof String);//false System.out.println("-----------------------------------");
Person person = new Student();
System.out.println(person instanceof Student);//true
System.out.println(person instanceof Person);//true
System.out.println(person instanceof Object);//true
System.out.println(person instanceof Teacher);//false
//System.out.println(person instanceof String);
//编译就报错 Person类 和String类是同级下的,无关,没有转换关系 System.out.println("-----------------------------------");
Student student = new Student();
System.out.println(student instanceof Student);
System.out.println(student instanceof Person);
System.out.println(student instanceof Object);
//System.out.println(student instanceof Teacher);
//编译就报错 Student(指引用类型) 和 Teacher无关
//System.out.println(student instanceof String);
//编译就报错 Student 和 String无关

类型转换

        //类型转换
//之前学的是基本类型转换 低到高,自动转(byte short char int long float double), 高到低(64 32 16 8) 强制转换
//现在学的是引用类型转换 父类(高)跟子类(低)转换 System.out.println("================类型之间的转换=============");
//一
//高 低 低---》高 自动转,不用强制转换
Person per1 = new Student();
//student.go();// 不能调用 此时Person中只有 run() ,Student中有go() 且继承run()
//那么如何让对象student 调用go()呢 ? 将对象student的类型(目前是Person类型)转换为Student类型,就可以使用Student类型的方法了
//Person类型 转 Student类型 高转低 强制转 ((Student)per1).go();
Student stu = (Student) per1;
stu.go(); //二 子类转父类 ,可能丢失一些自己本来的方法
Student stu1 = new Student();
//现在引用变量(对象)student 的引用类型为Student 想把它的类型转换为Person类型 低转高自动转 Person per2 = stu1; //默认转 Student类型转换为Person类型
//per2.go;报错
// 此时原来stu1类型为Student类型,转换为Person类型(转换为父类后)后,不能用Student的方法了,子类转父类 ,可能丢失一些自己本来的方法 }
}

注意

/*

    1. 父类的引用指向子类的对象 不能子类的引用指向父类的对象
    1. 把子类转换为父类,向上转型,低转高,自动转,不用强制转换 可能会丢失一些方法
    1. 把父类转换为子类,向下转型,高转低,需要强制转换
    1. 类型转换:方便方法的调用,减少重复的代码,使代码更简洁!
      *
  • 抽象的编程思想: 封装,继承,多态,越来越抽象
    *
  • */

​ 类型转换可能造成丢失精度或方法

最新文章

  1. MVC 框架搭建
  2. nginx相关
  3. editplus-查找替换的正则表达式应用
  4. android之对话、单复框的使用
  5. SpringMvc中Interceptor拦截器用法
  6. 【Qt】Qt Creator介绍【转】
  7. RAID0_RAID1_RAID10_RAID5各需几块盘才可组建
  8. leetcode@ [300] Longest Increasing Subsequence (记忆化搜索)
  9. WCF学习系列一_创建第一个WCF服务
  10. 无缝滚动js (手写通俗易懂)
  11. 一个带动画效果的颜色选择对话框控件AnimatedColorPickerDialog
  12. 将自己的域名代理到Gitpages
  13. SQL Server 2012还原一直卡在ASYNC_IO_COMPLETION浅析
  14. ajax请求返回json字符串/json对象 处理
  15. vue-webpack快速建立项目模板
  16. HDU 3591 (完全背包+二进制优化的多重背包)
  17. vi在行首插入注释符号#
  18. 微信小程序—day03
  19. Network——物理层-练习题与解答
  20. std::thread “terminate called without an active exception”

热门文章

  1. Mybatis使用注解开发(未完)
  2. Anaconda 安装 国内镜像问题解决方案
  3. Redis安装、说明、Python中使用
  4. RDMA相关的技术网站
  5. 端口转发工具--lcx
  6. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群
  7. C++设计模式 - 访问器模式(Visitor)
  8. Qt自定义控件之可伸缩组合框(GroupBox)控件
  9. 深入理解RPC—序列化
  10. 多数据源并且数据库类型不同的情况下PageHelper的使用