zoukankan      html  css  js  c++  java
  • 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("
    ---- c.action()");
            c.action();
            Base b = c;
            System.out.println("
    ---- b.action()");
            b.action();
            System.out.println("
    ---- b.s: " + b.s);
            System.out.println("
    ---- 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
  • 相关阅读:
    shell 去除utf8文件中bom头的方法
    bad interpreter:No such file or directory
    桥接配置虚拟机网络
    coreseek因为重启遇到的问题
    监听微信内置浏览器 返回点击事件
    phpredis 扩展装完后,重启php不生效的原因之一
    linux上ThinkPHP中原本正常的css,js文件找不到的解决方式
    vps
    java基础-《JAVA语言程序设计与数据结构》笔记
    面经问题总结——django相关
  • 原文地址:https://www.cnblogs.com/ooo0/p/11627013.html
Copyright © 2011-2022 走看看