Java编程思想读书笔记_第8章
覆盖私有方法
class Father {
private void f() { System.out.println("Father::f()"); }
public static void main(String[] args) {
Father father = new Son();
father.f(); //输出:Father::f()
}
}
class Son extends Father {
public void f() { System.out.println("Son::f()"); }
public static void main(String[] args) {
Son son = new Son();
son.f(); //输出:Son::f()
}
}
上面例子中由于Father的f是私有的,所以在Father的main方法中对f的调用是静态绑定的。
如果把f定义为public的,则在Father中对f的调用将是动态绑定的。
域与静态方法
class Father {
public int i = 0;
public int get() { return i; }
}
class Son extends Father {
public int i = 1;
public int get() { return i; }
public int get_super() { return super.i; }
}
class Test {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.i); //0
System.out.println(f.get());//1
Son s = new Son();
System.out.println(s.i);//1
System.out.println(s.get());//1
System.out.println(s.get_super());//0
Son s1 = (Son)f;
System.out.println(s1.i);//1
System.out.println(s1.get());//1
System.out.println(s1.get_super());//0
}
}
对于成员函数的访问是没有多态的,子类型和父类型中的i是不同的存储空间。使用父指针访问的时候使用的父的空间,使用子指针访问的时候使用的是子的空间。
在构造函数中调用的函数如果是可以动态绑定的,并且在子类中被继承了,那么就会调用子类的方法
class Father {
void draw() { System.out.println("Father::draw"); }
Father() { draw(); }
}
class Son extends Father {
int i = 1;
void draw() { System.out.println("Son::draw: " + i); }
}
class Test {
public static void main(String[] args) {
new Son(); //Son::draw: 0
}
}
如果把Father中的draw定义为private的,那么在Test中的输出就是Father::draw
Java编程思想读书笔记_第8章的更多相关文章
- Java编程思想读书笔记_第7章
final关键字类似const: import java.util.*; public class FinalData { static Random rand = new Random(47); f ...
- Java编程思想读书笔记_第6章
如何创建一个包: 比如创建一个包名为com.huawei 则在一个目录下如(d:\java)创建目录com/huawei 然后在huawei目录下创建一个文件Assist.java package c ...
- Java编程思想读书笔记_第三章
本章提到的关于==的部分,一个完整的实验如下: class Test { public static void main(String[] args) { Integer i = new Intege ...
- Java编程思想读书笔记_第6章(访问权限)
四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 package access.dessert; public class C ...
- Java编程思想读书笔记_第二章
java对于将一个较大作用域的变量“隐藏”的场景会有保护:编译告警.比如: int x = 5; { int x = 6; } 但是对于类中方法的局部变量和类成员变量确是可以重名的,比如 class ...
- java编程思想读书笔记 第十二章 通过异常处理错误(下)
1.异常的限制 当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常. 这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 以下的样例是在编译时施加在异常上面 ...
- JAVA编程思想读书笔记(五)--多线程
接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...
- JAVA编程思想读书笔记(四)--对象的克隆
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
- JAVA编程思想读书笔记(三)--RTTI
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...
随机推荐
- SD卡 驱动层测速
init_timer(&timer1); timer1.function = test_time; timer1.data = ; timer1.expires = jiffies + mse ...
- pycharm内存不足时如何修改设置?
Help->Find Action->(type "VM Options")->(Click)"Edit Custom VM Options" ...
- git的配置文件
转载:https://cnbin.github.io/blog/2015/06/19/git-config-ming-ling-cha-kan-pei-zhi-wen-jian/ Git Config ...
- 当遇到Mac的Excel或者Word老是重复崩溃的时候
打开Number,新建文件然后导出为Excel.之后再用Excel打开,一切都OK了.
- android Qemu GPS 模块简明分析
Android 的 gps module 是 gps.default.so 在system/lib/hw/ 文件夹上, 一般提供gps功能的手机应该实现这个module和真实gps硬件交互 Qemu ...
- Enterprise Library 5.0 学习笔记
近期了解了微软提供的企业开发框架Enterprise Library,眼下最新版本号是6.0,可是不支持FW3.5.所以就学习了5.0的版本号,EL5.0支持FW3.5和4.0,官网下载地址是:htt ...
- 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)
Ognl经常使用标签: 1.s:debug 假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态 2.s:property 1.输出 ...
- [办公应用]如何制作二Y轴图(excel)
有时候我们会遇到一种图表,就是X轴一致,可是Y轴的数据相差很大.如下图中,年龄和收入就不是一个数量级,在图表中显示的时候,“年龄”的曲线根本看不到(表中数据仅供举例): 解决的方法就是使用双Y轴显示, ...
- iOS如何查看静态库.a文件支持的cpu类型
打开终端: 输入 lipo -info 然后将你要查看的静态库.a 文件找到,拖入 -info 后边.假设路径为A,即为 lipo -info A 回车键,然后就会看到静态库是否支持 armv7,ar ...
- mysql与mongoDB的特点和优劣
首先分析下mysql与mongoDB的特点和优劣 从图中分析: 再来分析下应用场景: a.如果需要将mongodb作为后端db来代替mysql使用,即这里mysql与mongodb 属于平行级别,那么 ...