Java 面向对象:instanceof和类型转换的理解
Java 面向对象:instanceof和类型转换的理解
一、instanceof
1.定义:
instanceof A 判断一个引用所指向的对象,是否是A类型,或者A的子类
instanceof 的格式:
变量名 instanceof 数据类型,能不能编译通过是取决于,变量"指向的类型"和"数据类型"是否存在父子关系,如果存在父子关系则编译通过
换言之:X instanceof Y ,变量X指向的类型如果是Y的子类型则编译通过
instanceof 的使用
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。
所以,转换前,我们最好使用instanceof 先做一个判断
2. 实例
Person类(父类)
package Day0204.Demo03;public class Person {}
Student类(子类)继承Person类
package Day0204.Demo03;public class Student extends Person{}
Teacher类(子类)继承Person类
package Day0204.Demo03;public class Teacher extends Person{}
测试类
package Day0204.Demo03;
public class Test {public static void main(String[] args) {//Object > Person > Teacher//Object > String//Object > Person > StudentObject o = new Student();System.out.println(o instanceof Student);//trueSystem.out.println(o instanceof Person);//trueSystem.out.println(o instanceof Teacher);//falseSystem.out.println(o instanceof String);//falseSystem.out.println("======================");//Person > Teacher//String//Person > StudentPerson p = new Student();System.out.println(p instanceof Student);//trueSystem.out.println(p instanceof Person);//trueSystem.out.println(p instanceof Teacher);//false
// System.out.println(p instanceof String);//编译不通过System.out.println("======================");Student s = new Student();System.out.println(s instanceof Student);//trueSystem.out.println(s instanceof Person);//true
// System.out.println(s instanceof Teacher);//编译不通过
// System.out.println(p instanceof String);//编译不通过}
}
类之间的继承关系:
Object > Person > Teacher
Object > String
Object > Person > Student
变量o指向的是Student类型,
Student类是Person类和Object类的子类,与String类、Teacher类无关
所以前两个输出结果为true,而后两个为false
Object o = new Student();System.out.println(o instanceof Student);//trueSystem.out.println(o instanceof Person);//trueSystem.out.println(o instanceof Teacher);//falseSystem.out.println(o instanceof String);//false
以此类推
二、类型转换
1. 向上转型
向上转型:多态本身是子类类型向父类类型向上转换的过程,其中,这个过程是默认的。你可以把这个过程理解为基本类型的小类型转大类型自动转换,不需要强制转换。
当父类引用指向一个子类对象时,便是向上转型。
向上转型格式:
父类类型 变量名 = new 子类类型(); 如:Father f= new Son();
2.向下转型
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。同样可以把这个过程理解为基本类型的自动转换,大类型转小类型需要强制转换。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,向下转使用格式:
Father father = new Son();
子类类型 变量名 = (子类类型) 父类变量名; 如:Son s =(Son) father;
划重点:向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
- 向下转型的意义:
想要调用子类特有的方法,必须做向下转型。
参考宜春的“深入理解java多态没有烤山药的存在,java就不香了吗?”
以及【狂神说Java】Java零基础学习视频通俗易懂
Java 面向对象:instanceof和类型转换的理解相关推荐
- Java 面向对象:super关键字的理解
Java 面向对象:super关键字的理解 一.Super关键字: 1. super调用父类的构造方法,必须在构造方法的第一个 2. super只能出现在子类的方法或构造方法中! 3. super和t ...
- 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
面向对象的三大核心特性简介 面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率. 该开发模式之所以使程序设计更加完善和强大,主要是因为面向对象具有 ...
- JAVA面向对象-----instanceof 关键字
instanceof 关键字 1:快速演示instanceof Person p=new Person();System.out.println( p instanceof Person); 2:in ...
- java面向对象基本特征_Java 面向对象的基本特征
前言: 在刚开始接触Java的时候,那时候面对Java面向对象的几大特征一直理解的不是很理解,借着空闲时间在这里整理一下,同时在加深一下印象. 一.封装: Java面向对象的特征之封装,所谓的封装就是 ...
- Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类
Day16-01 P71 面向对象12:什么是多态 //父类Person package com.oop.demo06;public class Person {public void run(){S ...
- 【从零开始的Java开发】1-4-3 多态:概念、实现、向上转型、向下转型、instanceof、类型转换、抽象类、抽象方法
文章目录 概念 程序中的继承的实现 向上转型 向下转型 instanceof 运算符 类型转换案例 需求1 需求2 总结 抽象 抽象类 抽象方法 总结 总结 多态,即多种形态.我们可以认为,封装和继承 ...
- Java强制类型转换的理解
在Java中的强制类型转换和C语言中还是有一些区别的; 进行类型转换的唯一原因是: 在暂时忽视对象的实际类型之后, 使用对象的全部功能. 比如,我们可以定义一个父类的对象,然后引用某一个子类的对象,但 ...
- Java SE_封装、继承、object类、super-this关键字、方法重写、多态、instanceof、类型转换
封装 该露的露,该藏的藏 我们程序设计要追求"高内聚,低耦合".高内聚:类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量的方法给外部使用. 封装(数据的隐藏) 通常 ...
- java 面向对象个人理解
1.java面向对象我的理解是:一个系统可以看做一个对象,例如能耗监测系统,我需要监测能耗时,我只要用这个系统就可以了,他内部怎么实现的我不用去管. 2.举个例子:例如一个人是一个对象,可以用属性描述 ...
最新文章
- 如何挑选一家好的软件测试培训机构
- HRFormer,内存和参数降低40%
- 开发日记-20190609 关键词 记录一次失败,感悟,畅想未来
- java查询数据库以后的对齐问题
- 博士申请 | 英国爱丁堡大学NLP组招收自然语言处理方向全奖博士生
- 【算法】输入一个链表,反转链表后,输出新链表的表头。
- Liunx下使用Nginx负载均衡
- aes密文长度_RSA加密密文可变(一句话说明)
- 杂记 C中的volatile
- 演示和解析Flex布局中的各种属性
- Linux input输入子系统demo驱动
- 计算机模拟 matlab,MATLAB计算机模拟实例课件.ppt
- php 冗余代码检测,冗余代码检查工具Simian | 求索阁
- 阿拉伯数字转化成大写金额
- PADS 导入cadence dsn文件,同步pads layout
- 教你微星电脑按f几重装系统
- 向NS2中添加协议PING
- 例题 9-8 颜色的长度(Color Length, ACM/ICPC Daejeon 2011, UVa1625)
- 基于模型的设计及其嵌入式实现(无水印).pdf_DeepMind打造最强表示学习模型BigBiGAN,Goodfellow点赞!...
- CSS3计数器的使用-遁地龙卷风
热门文章
- C#学习(6)——LINQ学习
- [转] ASP.NET中使用javascript
- JavaScript let、const与var的区别
- CSS3 移动端开发技巧
- jQuery源码研究分析学习笔记-回调函数(11)
- WIN10+VS2015环境下安装PCL1.8.1
- 元气骑士超级计算机有什么用,元气骑士三持技巧分享,手残党的福利轻松过关...
- Prototype(原型原型链)
- 4010-基于邻接矩阵的边的删除(C++,附思路)
- js list操作_使用 Node.js 实现一个命令行 todo-list(1)- 基本功能