引用变量的类型强转以及InstanceOf方法的使用
class Person{
String name;
}
class Student extends Person{
String sut_no;
}
class ClassMate extends Student{
}
总结:使用instanceOf的时候注意 左边运行时类型是右边或其子类的类型(右边的实例) 返回true
左边的编译类型必须是右边类型或其父类类型 (否则编译失败)
强制转换时并不是所有的父类都可以强转子类(编译都可以通过)只有满足父类的运行时类型是该类或该子类方可
public static void main(String[] args) throws Exception {
String str = "test";
System.out.println(str instanceof Object); //true
Long number = new Long(123);
System.out.println(number instanceof Object); //true
//System.out.println(number instanceof String); 编译通不过
Person p = new Person();
Student s = new Student();
System.out.println(s instanceof Person); //true
Person stu = new Student();
System.out.println(stu instanceof Person); //true
System.out.println(stu instanceof Student); //true
System.out.println(stu instanceof ClassMate); //false
// java.lang.ClassCastException: Person cannot be cast to Student
// 将父类强制转换为子类需要注意
// 如果该父类的运行时类型是该类 或该子类 则可以
// 否则会出现 ClassCastException
// Person person = new Person();
// Student student = (Student) person;
Person person2 = new ClassMate();
Student student2 = (Student)person2;
System.out.println(student2 instanceof Person); //true
System.out.println(student2 instanceof Student); //true
//总结:使用instanceOf的时候右边类是 左边对象的运行时类型或者是运行时类型父类的时候返回true;
//强制转换时并不是所有的父类都可以强转子类(编译都可以通过)只有满足父类的运行时类型是该类或该子类方可
}
2、引用变量的强制类型转换
引用类型之间的转换只能把一个父类变量转换成子类类型,如果两个没有任何继承关系的类型,则无法进行
类型转换,否则编译时就会报错。如果试图将一个父类转换成子类,那么父类对象的运行时类型必须是子类
的实例才行,否则在运行时引发ClassCastException;
3、所谓创建A类的实例:就是说这个实例是A类或其子类的对象 instanceOf的作用就是判断 左边对象运行时类型到底是不是 右边的实例 若是 返回true 否则false
引用变量的类型强转以及InstanceOf方法的使用的更多相关文章
- Java引用变量的类型
Java引用变量的类型 1.编译时类型:由声明该变量时使用的类型决定 2.运行时类型:由实际赋给该变量的对象决定 如果编译时类型和运行时类型不一致,就可能出现多态性
- Java中isAssignableFrom()方法与instanceof()方法用法
一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. isAssignableFrom()方法是判断是否为某个类的父类, ...
- instanceof运算符与引用变量的强制类型转换
一.instanceof运算符 instanceof是Java语言中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口.抽象类.父类)的实例,即它左边的对象是否是它右边 ...
- null值可以赋给引用变量,不能给基本类型
下面正确的写法是? cbyte i=128 boolean i=null long i=0xfffL double i=0.9239d null表示没有地址:null可以赋值给引用变量,不能将null ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
- JS 中对变量类型的五种判断方法
5种基本数据类型:undefined.null.boolean.unmber.string 复杂数据类型:object. object:array.function.date等 方法一:使用typeo ...
- block 对外部引用变量的处理
MRC 环境 一.静态变量 和 全局变量 在加和不加 __block 都会直接引用变量地址.也就意味着 可以修改变量的值.在没有加__block 参数的情况下. 全局block 和 栈block ...
- JS面试题-<变量和类型>-JavaScript的数据类型
前言 整理以前的面试题,发现问js数据类型的频率挺高的,回忆当初自己的答案,就是简简单单的把几个类型名称罗列了出来,便没有了任何下文.其实这一个知识点下可以牵涉发散出很多的知识点,如果一个面试者只是罗 ...
随机推荐
- Codeforces 898 C.Phone Numbers-STL(map+set+vector)
C. Phone Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- TCO 2015 Round 2A DIV1
ModModMod 傻逼数论 题意: 这是一道卖萌的题..给你一个取模序列$m$,令$f(x)=(\cdots (x\ mod\ m[0])\ mod m[1])\mod m[2]\cdots $,问 ...
- 洛谷2085最小函数值(minval) + 洛谷1631序列合并
题目描述 有n个函数,分别为F1,F2,-,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...
- Vuex 通俗版教程
作者 Yeaseon 已关注 2017.03.16 16:44* 字数 1245 阅读 243评论 2喜欢 4 本文基本上是官方教程的盗版,用通俗易懂的文字讲解Vuex,也对原文内容有删减. 如果你对 ...
- GestureDetector 完全解析
个人原创 OnDown(MotionEvent e):用户触发DonenEvent就会执行onShowPress(MotionEvent e):用户触发DonenEvent后,在很短大概0.5秒内,没 ...
- 终于会用c#中的delegate(委托)和event(事件)了 [转]
原文 : http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 一.开篇忏悔 对自己最拿手的编程语言C#,我想对你 ...
- Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据.我们希望把这些数据导入到MySQL数据库中.phpMyadmin能够把MySQL数据库中的数据导出为JSON格式文件,但却 ...
- Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental……
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...
- 安装nagios
第二部分.apache的安装 615 tar zxvf httpd-2.2.9.tar.gz 616 cd httpd-2.2.9 617 ./configure --prefix=/u ...
- 设计模式之Visitor模式(笔记)
訪问者模式:表示一个作用于某个对象结构中的各元素操作.它使你能够不改变各元素的类的前提下定义作用于这些元素的新操作. 首先定义一个visitor抽象类,为每一个详细类声明一个visit操作 publi ...