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. 类型转换:方便方法的调用,减少重复的代码,使代码更简洁!
      *
  • 抽象的编程思想: 封装,继承,多态,越来越抽象
    *
  • */

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

instanceof 和类型转换的更多相关文章

  1. 12.instanceof和类型转换

    Instanceof: 判断一个对象是什么类型的~,可以判断两个类之间是否存在父子关系 package com.oop.demo07; public class Person { public voi ...

  2. Java面向对象系列(11)- instanceof和类型转换

    instanceof 先看引用类型的类和instanceof比较的类有没有父子关系,有则可以编译,IDEA不报错 new一个对象,对象new所在的类和instanceof比较的类有没有父子关系,有则为 ...

  3. instanceof和类型转换

    什么是instanceof 判断一个对象是什么类型 注意点 X 和 Y 必须要有父子关系 否则编译都会失败 X对象只要是Y的子类(无论 是 儿子 还是 孙子 还是 曾孙....)X instanceo ...

  4. Java匹马行天下之JavaSE核心技术——面向对象

    面向对象 注: 看此篇时强烈建议有一定的面向对象思想基础,有一定的基础后先翻到下面看第九条:      9.面向对象: 从未封装→封装→继承→多态→抽象类→接口的代码演变 按这个逻辑去看,,哪有不理解 ...

  5. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...

  6. JavaSE(二)之继承、封装、多态

    学习完类与对象终于认识到什么是类,什么是对象了.接下来要看的就是java的三大特征:继承.封装.多态. 一.封装(数据的隐藏) 在定义一个对象的特性的时候,有必要决定这些特性的可见性,即哪些特性对外部 ...

  7. 160426、JavaScript 秘密花园

    简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...

  8. java基础语法4--封装,继承,多态

    学习路线: 未封装==>封装==>继承==>多态==>抽象类 首先还是那句话,万物皆对象,对象有行为和属性. 一:封装 1.封装的概念: 信息隐蔽和对象的属性及操作结合成一个独 ...

  9. JAVA基础复习(重点)

    一. 初识Java编程 1.           Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2.实现第一个hello world public cl ...

随机推荐

  1. ArcGIS Server创建站点失败Failed to register the activation group

    ArcGIS Server:10.6 解决方法:右键我的电脑-->管理-->服务,重启arcgis server 服务

  2. 4月16日 python学习总结 封装之property、多态 、classmethod和staticmethod

    一.封装之property @property把一个函数伪装成一个数据类型  @伪装成数据的函数名.setter   控制该数据的修改,修改该数据时触发 @伪装成数据的函数名.delect  控制该数 ...

  3. CVE-2017-8759 微软word漏洞复现以及利用

    CVE-2017-8759 微软word漏洞复现以及利用 0x00 漏洞描述 近日,360集团核心安全事业部分析团队发现一个新型的Office文档高级威胁攻击,攻击使用了9月12日补丁刚修复的.NET ...

  4. 西门子S7-1200PLC不让下载一直报“模块具有激活的测试和调试功能,防止下载到设备”解决方法

    错误如图 这是因为PLC被强制了,导致下载会报这类错误.取消强制就可以下载. 或者将cpu重置为出厂设置,也能再次下载. 参考:https://www.ad.siemens.com.cn/servic ...

  5. linux的一些sao东西

    1.sys命令的目录 /usr/include/asm-generic

  6. 一文带你了解Lakehouse的并发控制:我们是否过于乐观

    1. 概述 如今数据湖上的事务被认为是 Lakehouse 的一个关键特征. 但到目前为止,实际完成了什么? 目前有哪些方法? 它们在现实世界中的表现如何? 这些问题是本博客的重点. 有幸从事过各种数 ...

  7. 《前端运维》四、Jenkins--持续构建

    首先,我们先来了解下什么叫做持续构建.持续构建简称CI,负责拉取代码库中的代码后,执行用户预定义的脚本,通过一系列编译操作构建出一个制品,并将制品推送到制品库里.常用的持续构建工具有 Gitlab C ...

  8. python爬虫 Selenium库学习

    一.自动化测试工具,支持多种浏览器,解决JS渲染问题 二.安装 pip3 install Selenium 三.操作介绍(因为是学习别人的课程为了尊重知识产权,部分代码就不显示了) 1驱动浏览器 br ...

  9. MM32F0140的复位脚nRST复用成普通GPIO PA10功能

    目录: 1.MM32F0020简介 2.MM32F0020的复位脚nRST和PA10的说明 3.MM32F0020的选项字节说明 4.MM32F0020的FLASH_OBR选项字节寄存器说明 5.MM ...

  10. 二叉树,红黑树,B+树

    在实际使用时会根据链表和有序数组等数据结构的不同优势进行选择.有序数组的优势在于二分查找,链表的优势在于数据项的插入和数据项的删除.但是在有序数组中插入数据就会很慢,同样在链表中查找数据项效率就很低. ...