在java多态中instanceof的作用
-
Instanceof 是java中保留的关键字。 它的作用是测试它左边的对象是否为它右边的类的实例,也可以说是判断一个对象指向的空间是否为某个类型,返回值是boolean类型。
注意:JVM虚拟机会检查obj是否能转换成右边class类型,如果不能转换直接报错,如果不确定类型,则通过编译,具体看运行而定 -
使用方法为
boolean result = obj instanceof class
其中obj 为一个对象,class表示一个类,实例应用可以参考,封装、继承、多态基础练习 - 掘金 (juejin.cn) 里面的练习题
if(e instanceof Manager) { ((Manager)e).manage(); }
注释:这个代码的意思为,判断e这个对象引用指向的空间是否为Manager类型,返回的是Boolean值
动态绑定机制
- 这个知识在java多态应用中非常重要,所以自己再次回顾一遍,先看图看例题
要非常清楚 Sub s = new Sub()
结论:=(等号)左边是编译类型,=(等号)右边是运行类型
如果是System.out.println(s.count)
,s.属性,看左边的编译类型,看Sub中的count属性,所以输出的是20
如果是s.display()
,s.方法,看右边的与运行类型,看Sub中的count,所以输出的是20
再来👇👇👇
上图中,Base b = s;
意思为:将s的地址赋值给b ,我们再来看后面输出的结果
如果是System.out.println(b.count)
,s.属性,看左边的编译类型,看的是父类中的count,所以输出的是10
如果是b.display()
,s.方法,看右边的运行类型,看的是子类中的count,所以输出的是20
- 重定义系统方法
-
先说一下怎么查看系统方法的源码,在idea中的快捷方法为:ctrl+b
-
在Eclipse中查看JDK类库的源代码!!!
核心提示:在Eclipse中查看JDK类库的源代码!!!
设置:
1.点 window- Preferences - Java - Installed JRES
2.此时Installed JRES右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 Edit..., 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项
设置:
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"
2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar”
点 左边的“+” 号展开它,
4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件
5.一路点"ok",结束。
Dt.jar是关于运行环境的类库,主要是swing的包
tools.jar是关于一些工具的类
封装继承多态的理解
前提:初学java,对封装继承多态,只是停留在概念上和部分习题上的理解,并不清楚未来的做项目过程中,到底会有什么神奇的功效,而且自己也不是太熟量的掌握了其底层的原理,所以在以后还是会多加巩固、练习相关习题
- 封装:私有化属性,公开方法,保证数据的合理性,控制属性的读写
- 继承通过extands声明 继承的父类,实现代码复用,java是单继承
- 多态:同一对象,同种行为的不同表现形态(父类型引用指向子类型对象)