引用变量的类型强转以及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数据类型的频率挺高的,回忆当初自己的答案,就是简简单单的把几个类型名称罗列了出来,便没有了任何下文.其实这一个知识点下可以牵涉发散出很多的知识点,如果一个面试者只是罗 ...
随机推荐
- Network | CIDR
无类别(现在) 无类别域间路由(Classless Inter-Domain Routing.CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法. CI ...
- centos 7 mysql 离线安装教程
1. 解压下载的zip包,会发现有以下几个rpm包: MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm MySQL-devel-advanced-5.6.22 ...
- android dagger2使用笔记
Dependency Injecte(依赖注入) 首先写个不使用依赖注入的示例 interface // House.java public interface House { void prepar ...
- JavaScript中的普通函数和箭头函数
最近被问到了一个问题: javaScript 中的箭头函数 ( => ) 和普通函数 ( function ) 有什么区别? 我当时想的就是:这个问题很简单啊~(flag),然后做出了错误的回答 ...
- JavaScript 深克隆
深克隆 function judgeType(arg){//判断js数据类型 return Object.prototype.toString.call(arg).slice(8,-1); } fun ...
- EasyMvc入门教程-基本控件说明(8)提醒导航
提醒导航顾名思义就是提醒大家注意某些文字了..请看下面的例子: 实现代码如下: @Html.Q().BlockRemind().Text("我可以作为提醒使用") 有的同学会说:这 ...
- 2016.6.20 maven下载与安装步骤
(1)进入maven官网的下载页面. https://maven.apache.org/download.cgi (2)下载页面中可以看到很多可供下载的链接.gz和zip只是压缩方式的区别,这两个都是 ...
- jQuery ajax 获取信息展示在“下拉列表”中
<link href="${ctxStatic}/jquery-select2/4.0.3/select2.min.css" rel="stylesheet&quo ...
- java集合类型接口和实现类个人总结
转载:http://blog.csdn.net/qingchunbusanchang/article/details/39576749 java的集合是一个比较综合的概念,相关的知识有很多的博客里面做 ...
- 【SharePoint】K2 for SharePoint 安装笔记【未完工】
0.安装环境说明 0.1.软件版本 OS : Window Server 2012 标准版 SharePoint : 2013标准版 K2 : 4.6.9 0.2.环境结构 SharePoint 20 ...