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对象(更恰当的说, ...
随机推荐
- OJ(Online Judge)
OJ:它是Online Judge系统的简称,用来在线检测程序源代码的正确性.著名的OJ有RQNOJ.URAL等.国内著名的题库有北京大学题库.浙江大学题库等.国外的题库包括乌拉尔大学.瓦拉杜利德大学 ...
- Maven项目中遇到的奇葩问题(续)
场景描写叙述 开发项目搞环境是一个很蛋疼的问题.总是会遇到各种奇葩的问题,上一篇文章http://blog.csdn.net/gao36951/article/details/50955526中遇到的 ...
- CodeIgniter 向mysql插入数据包括字母、汉字问题
今天在使用ci框架,须要向mysql数据表插入数据.当中的一个字段包括汉字.字母.但是用传统的使用sql语句:insert into XXX这样的方式,不管怎样都插入不成功,最后我换了还有一种方式: ...
- poj 2728 最优比例生成树(01分数规划)模板
/* 迭代法 :204Ms */ #include<stdio.h> #include<string.h> #include<math.h> #define N 1 ...
- HTML DOM Table 对象
Table 对象 Table 对象代表一个 HTML 表格. 在 HTML 文档中 <table> 标签每出现一次,一个 Table 对象就会被创建. Table 对象集合 集合 描述 c ...
- H264--5--H264解码[8]
原文:http://blog.csdn.net/yangzhongxuan/article/details/8003547 解码器在解码时,首先逐个字节读取NAL的数据,统计NAL的长度,然后再开始解 ...
- 在mac上安装gradle(超详细,直接按步骤操作即可轻松搞定)
第一步, 就是先download最新版本的gradle,网址如下: http://gradle.org/gradle-download/ 然后将下载下来的zip包放解压到本地任意的路径上, 例如,我本 ...
- 混淆时报:Proguard returned with error code 1. See console
发生这个错误是因为打包混淆时找不到我们的引用包,有的人可能说我没有引用什么Library啊,事实上,我们现在的项目创建时就默认有v4包,这是google提供的兼容包,主要为了应对Android3.0以 ...
- go语言---map
go语言---map https://blog.csdn.net/cyk2396/article/details/78890185 一.map的用法: type PersonDB struct { I ...
- python-----opencv读取视频、读取图片 显示指定大小并按键实现暂停、播放
按空格键实现暂停播放,代码如下: cv2.namedWindow("m1", 0) cv2.resizeWindow("m1", 800, 600) cv2.i ...