覆盖私有方法

  1. class Father {
  2. private void f() { System.out.println("Father::f()"); }
  3. public static void main(String[] args) {
  4. Father father = new Son();
  5. father.f(); //输出:Father::f()
  6. }
  7. }
  8.  
  9. class Son extends Father {
  10. public void f() { System.out.println("Son::f()"); }
  11. public static void main(String[] args) {
  12. Son son = new Son();
  13. son.f(); //输出:Son::f()
  14. }
  15. }

上面例子中由于Father的f是私有的,所以在Father的main方法中对f的调用是静态绑定的。

如果把f定义为public的,则在Father中对f的调用将是动态绑定的。

域与静态方法

  1. class Father {
  2. public int i = 0;
  3. public int get() { return i; }
  4. }
  5.  
  6. class Son extends Father {
  7. public int i = 1;
  8. public int get() { return i; }
  9. public int get_super() { return super.i; }
  10. }
  11.  
  12. class Test {
  13. public static void main(String[] args) {
  14. Father f = new Son();
  15. System.out.println(f.i); //0
  16. System.out.println(f.get());//1
  17. Son s = new Son();
  18. System.out.println(s.i);//1
  19. System.out.println(s.get());//1
  20. System.out.println(s.get_super());//0
  21. Son s1 = (Son)f;
  22. System.out.println(s1.i);//1
  23. System.out.println(s1.get());//1
  24. System.out.println(s1.get_super());//0
  25. }
  26. }

对于成员函数的访问是没有多态的,子类型和父类型中的i是不同的存储空间。使用父指针访问的时候使用的父的空间,使用子指针访问的时候使用的是子的空间。

在构造函数中调用的函数如果是可以动态绑定的,并且在子类中被继承了,那么就会调用子类的方法

  1. class Father {
  2. void draw() { System.out.println("Father::draw"); }
  3. Father() { draw(); }
  4. }
  5.  
  6. class Son extends Father {
  7. int i = 1;
  8. void draw() { System.out.println("Son::draw: " + i); }
  9. }
  10.  
  11. class Test {
  12. public static void main(String[] args) {
  13. new Son(); //Son::draw: 0
  14. }
  15. }

如果把Father中的draw定义为private的,那么在Test中的输出就是Father::draw

Java编程思想读书笔记_第8章的更多相关文章

  1. Java编程思想读书笔记_第7章

    final关键字类似const: import java.util.*; public class FinalData { static Random rand = new Random(47); f ...

  2. Java编程思想读书笔记_第6章

    如何创建一个包: 比如创建一个包名为com.huawei 则在一个目录下如(d:\java)创建目录com/huawei 然后在huawei目录下创建一个文件Assist.java package c ...

  3. Java编程思想读书笔记_第三章

    本章提到的关于==的部分,一个完整的实验如下: class Test { public static void main(String[] args) { Integer i = new Intege ...

  4. Java编程思想读书笔记_第6章(访问权限)

    四种访问权限: public private 包访问权限 protected 如果没有明确指定package,则属于默认包 package access.dessert; public class C ...

  5. Java编程思想读书笔记_第二章

    java对于将一个较大作用域的变量“隐藏”的场景会有保护:编译告警.比如: int x = 5; { int x = 6; } 但是对于类中方法的局部变量和类成员变量确是可以重名的,比如 class ...

  6. java编程思想读书笔记 第十二章 通过异常处理错误(下)

    1.异常的限制 当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常. 这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 以下的样例是在编译时施加在异常上面 ...

  7. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  8. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  9. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

随机推荐

  1. Codeforces 803F(容斥原理)

    题意: 给n个正整数,求有多少个GCD为1的子序列.答案对1e9+7取模. 1<=n<=1e5,数字ai满足1<=ai<=1e5 分析: 设f(x)表示以x为公约数的子序列个数 ...

  2. canvas 插件

    http://www.jq22.com/yanshi2217 参考这个站 发现一些比较有用的canvas插件: 线形图插件:jquery.sparkline 2.1.1 excanvas 环形图,饼状 ...

  3. pageContext 获取Session 为null原因

    问题:在J2EE应用中.发如今自己定义标签中取不到session: HttpSession session = pageContext.getSession(); 你会发现session的值可能是空的 ...

  4. yarn 和 npm 的区别

    npm 与 yarn 命令对比 npm yarn npm install yarn install (N/A) yarn install --flat (N/A) yarn install --har ...

  5. Windows 环境下运用Python制作网络爬虫

    import webbrowser as web import time import os i = 0 MAXNUM = 1 while i <= MAXNUM: web.open_new_t ...

  6. io口的作用

    I/O接口的作用     主机与外界交换信息称为输入/输出(I/O).主机与外界的信息交换是通过输入/输出设备进行的.一般的输入/输出设备都是机械的或机电相结合的产物,比方常规的外设有键盘.显示器.打 ...

  7. Codeforces Beta Round #2 B. The least round way

    这个2B题还好~~ 题目大意: 给出一个矩阵.从左上走到右下,仅仅能往右或下走.路径中每一个格子有一个数.这些数相乘得出一个数. 求这个数末尾零最少的一条路径. 解题思路: 找出一条路径.乘积得数中素 ...

  8. CBO之Full Table Scan - FTS算法

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/44261859 ************************************** ...

  9. simple-framework(MaliSDK框架分析)

    simple-framework(Mali SDK框架分析) 1.全部的定义及实现放在同一个命名空间中.文件包括#include一般在命名空间的外面. 总的命名空间为namespace MaliSDK ...

  10. mysqld 与 python 邮件监控脚本 内存消耗对比

    top - 21:38:40 up 1 day, 10:38, 5 users, load average: 0.00, 0.01, 0.17Tasks: 88 total, 1 running, 8 ...