java继承实现的基本原理
方法调用的过程
寻找要执行的实例方法的时候,是从对象的实际类型信息开始查找的,找不到的时候,再查找父类类型信息。
动态绑定,而动态绑定实现的机制就是根据对象的实际类型查找要执行的方法,子类型中找不到的时候再查找父类。
变量访问的过程
对变量的访问是静态绑定的,无论是类变量还是实例变量。代码中演示的是类变量:b.s和c.s,通过对象访问类变量,系统会转换为直接访问类变量Base.s和Child.s。
示例代码:
- package com.xc.xcspringboot.chapter4.chapter4_3_1;
- /**
- * Created by xc on 2019/10/6
- * 代码清单4-7 演示继承原理:Base类
- */
- public class Base {
- /**
- * 静态变量s
- */
- public static int s;
- /**
- * 实例变量a
- */
- private int a;
- // 静态初始化代码块
- static {
- System.out.println("基类静态代码块, s: " + s);
- s = 1;
- }
- // 实例初始化代码块
- {
- System.out.println("基类实例代码块, a: " + a);
- a = 1;
- }
- /**
- * 构造方法
- */
- public Base() {
- System.out.println("基类构造方法, a: " + a);
- a = 2;
- }
- /**
- * 方法step
- */
- protected void step() {
- System.out.println("base s: " + s + ", a: " + a);
- }
- /**
- * 方法action
- */
- public void action() {
- System.out.println("start");
- step();
- System.out.println("end");
- }
- }
- package com.xc.xcspringboot.chapter4.chapter4_3_1;
- /**
- * Created by xc on 2019/10/6
- * 代码清单4-8 演示继承原理:Child类
- */
- public class Child extends Base {
- /**
- * 和基类同名的静态变量s
- */
- public static int s;
- /**
- * 和基类同名的实例变量a
- */
- private int a;
- static {
- System.out.println("子类静态代码块, s: " + s);
- s = 10;
- }
- {
- System.out.println("子类实例代码块, a: " + a);
- a = 10;
- }
- public Child() {
- System.out.println("子类构造方法, a: " + a);
- a = 20;
- }
- protected void step() {
- System.out.println("child s: " + s + ", a: " + a);
- }
- }
- package com.xc.xcspringboot.chapter4.chapter4_3_1;
- /**
- * Created by xc on 2019/10/6
- */
- public class Chapter4_3_1 {
- public static void main(String[] args) {
- System.out.println("---- new Child()");
- Child c = new Child();
- System.out.println("\n---- c.action()");
- c.action();
- Base b = c;
- System.out.println("\n---- b.action()");
- b.action();
- System.out.println("\n---- b.s: " + b.s);
- System.out.println("\n---- c.s: " + c.s);
- }
- }
- ---- new Child()
- 基类静态代码块, s: 0
- 子类静态代码块, s: 0
- 基类实例代码块, a: 0
- 基类构造方法, a: 1
- 子类实例代码块, a: 0
- 子类构造方法, a: 10
- ---- c.action()
- start
- child s: 10, a: 20
- end
- ---- b.action()
- start
- child s: 10, a: 20
- end
- ---- b.s: 1
- ---- c.s: 10
java继承实现的基本原理的更多相关文章
- Java编程的逻辑 (17) - 继承实现的基本原理
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- 关于java继承的哪些事
引言 本文结合一个例子来说明继承实现的基本原理. 基类Base代码如下所示: public class Base { public static int s; private int a; stati ...
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- Java继承和接口
接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...
- Java继承的初始化
/** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java继承关系中成员变量,构造方法,成员方法的关系
Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
随机推荐
- xadmin引入drf-yasg生成Swagger API文档
一.安装drf-yasg: 由于django-rest-swagger已经废弃了 所以引入了drf-yasg pip install drf-yasg 安装install drf-yasg库 http ...
- SQL注入中的WAF绕过
1.大小写绕过 这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等绕过. 2.简单编码绕过 比如WAF检测关键字,那么我们让他检测不到就可以了. ...
- python中的特殊注释#todo与#type
0904自我总结 python中的特殊注释 一.#TODO 这个注释用来快熟找到内容 #todo这里的todo不用区分大小写 写法标记的位置,#todo 备注内容 二.#type a = 1 #typ ...
- 项目Beta冲刺(团队) —— 凡事预则立
1.讨论组长是否重选的议题和结论 讨论: 我们采取匿名群投票的方式进行 投票结果如下: 成员共7人 投票7人 投票率100% 结果有效 结论: 不需要重选组长 2.下一阶段需要改进完善的功能 完善游戏 ...
- HDU6625: three arrays (字典树处理xor)
题意:给出A数组,B数组,你可以对A和B分别进行重排列,使得C[i]=A[i]^B[i]的字典序最小. 思路:对于这类题,显然需要建立字典树,然后某种形式取分治,或者贪心. 假设现在有了两颗字典树A ...
- windows命令查看端口占用情况
打开cmd 查看端口占用情况:netstat -aon 查看PID对应的进程:tasklist /FI "PID eq 16948"
- 16、Python面向对象进阶
一.对象的继承 Python中支持一个类同时继承多个父类 class Parent1: pass class Parent2: pass class Sub1(Parent1, Parent2): p ...
- 前端性能----TCP协议
TCP属于OSI七层模型中的传输层协议,位于网络边缘,提供端到端的可靠数据传输,其有着承上启下的作用,协议数据单元为报文段(Message Segment). TCP需要提供以下功能: 分组和复用 应 ...
- 【CF765F】Souvenirs
[CF765F]Souvenirs 题面 洛谷 题解 我们可以发现,对于某个右端点\(i\),左端点\(j\)在由\(i\rightarrow 1\)的过程中,每一段的答案是单调不增的,由这个性质,我 ...
- 洛谷2320 bzoj1192 鬼谷子的钱袋
题目链接 题意概述:把正整数n分为m个正整数,m个正整数中不允许出现复数个非1的正整数,保证所有小于n的正整数都可以用一部分正整数的和表示,并且使m尽量小. 这道题不知道为啥bzoj上没有要求输出方案 ...