关于javase中 instanceof的用法 为什么判读之后 还要进行强制类型转换
2017-08-18 22:33
330 查看
笔记 : java中多态的理解 应该理解为两个阶段: 一个是编译的阶段 另一个是运行的阶段:
例如
Clas A{ } 父类
子类B :Class B extends A{
public void test(Object o){
if(o instanceof A ){
A a = (A)o// 刚开始的时候 这里我一直闹不明白这里为什么要进行强制转换 因为[b]b.test(c)这里明明传入C是A的子类 , 根据多态 子类的引用可以直接付给父类的引用 为什么还要进行强制类型转换呢?[/b]
后来才明白 [b]if(o instanceof A ) 执行这句话的时候 在运行阶段 这里的确是判断o是不是A类的一个实例或者子类,但是在编译阶段 ,public void test(Object o) 这里的o编译器就是认为是Object的引用
o 是所有类的父类,[/b]
A是Object的子类,那么在编译阶段 :[b] 父类的引用不能直接付给子类 ,所以要进行强制类型转换
[/b]
}
}
子类C:Class C extends A{}
B b = new B();
C c =new C();
b.test(c)
例如
Clas A{ } 父类
子类B :Class B extends A{
public void test(Object o){
if(o instanceof A ){
A a = (A)o// 刚开始的时候 这里我一直闹不明白这里为什么要进行强制转换 因为[b]b.test(c)这里明明传入C是A的子类 , 根据多态 子类的引用可以直接付给父类的引用 为什么还要进行强制类型转换呢?[/b]
后来才明白 [b]if(o instanceof A ) 执行这句话的时候 在运行阶段 这里的确是判断o是不是A类的一个实例或者子类,但是在编译阶段 ,public void test(Object o) 这里的o编译器就是认为是Object的引用
o 是所有类的父类,[/b]
A是Object的子类,那么在编译阶段 :[b] 父类的引用不能直接付给子类 ,所以要进行强制类型转换
[/b]
}
}
子类C:Class C extends A{}
B b = new B();
C c =new C();
b.test(c)
相关文章推荐
- 2.为什么在写了equals方法之后还要写hashcode方法
- 为什么360浏览器,打开几个页面,然后不对电脑进行任何操作,等过很长时间之后,为什么内存占用会逐渐上升直到崩溃??表现为操作系统卡的不行,做什么都卡
- 关于ubuntu安装之后系统grub被破坏了之后进行修复的总结
- 关于Activity调用Ondestroy()方法之后内存管理器为什么没有释放占用资源
- 关于上传音像等文件之后以及转换成字节流进行入库
- 关于php,为什么要使用面向对象进行项目开发
- 今天看到了一篇关于为什么要进行Bug管理的文章。
- 为什么session.close(),之后不进行事务回滚
- 关于typeof 、instanceof 、constructor的用法
- linux关于sort命令的高级用法(按多个列值进行排列)
- 为什么重写了equals()之后还要重写hashCode()
- 有了基本类型之后为什么还要有包装器类型呢?
- 关于在子线程中在run方法执行完之后通知主线程进行操作的方法。(Toast在子线程中无法使用)
- 关于ubuntu安装之后系统grub被破坏了之后进行修复的总结("error:file not found。 grub rescue")
- linux关于sort命令的高级用法(按多个列值进行排列)
- 关于MAC地址与IP地址的存在解析(为什么有了MAC地址还要IP地址?)
- 关于为什么进行Revit二次开发的理解
- sort函数的用法(C++排序库函数的调用) 对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。 (一)为什么要用c++标准库里的排序函数 Sort()函数是c+
- Android 关于对某个 view 的截图和截图之后再对 view的图片进行高斯模糊效果
- 关于Tcp,为什么一定要进行三次握手呢?