• 【Java编程思想读书笔记】继承中父类的初始化方式


    继承中父类的初始化方式

    p144页有感

    一、提出问题

    假设有一些类,这些类有继承关系的时候,当初始化一个子类对象,对于该类的父类而言,发生了什么呢?是仅仅只是复制了一个引用还是也会同时new一个父类对象呢?

    二、解释问题

    由于涉及到子类和父类之间的关系,从外部看,似乎子类拥有与父类相同的接口,而且可包含一些额外的方法和字段。但继承并非仅仅简单地复制父类的接口了事。创建子类的一个对象时,它在其中包含了父类的一个“对
    象”。这个对象就象我们根据父类本身创建了它的一个对象。从外部看,父类的对象已封装到子类的对象里了。当然,父类对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器中执行初始化,通过调用父类构建器,后者有足够的能力和权限来执行对父类的初始化。在子类的构建器中,Java 会自动插入对父类构建器的调用。

    三、验证问题

    class Art {
     Art() {
     System.out.println("Art 构造器");
     }
    }
    
    
    class Drawing extends Art {
     Drawing() {
     System.out.println("Drawing 构造器");
     }
    }
    
    
    public class Cartoon extends Drawing {
     Cartoon() {
     System.out.println("Cartoon 构造器");
     }
     public static void main(String[] args) {
     Cartoon x = new Cartoon();
         }
    } 
    

    输出:

    Art 构造器
    Drawing 构造器
    Cartoon 构造器
    

    可以看出,构建是在基础类的“外部”进行的,所以基础类会在衍生类访问它之前得到正确的初始化。
    即使没有为 Cartoon()创建一个构建器,编译器也会为我们自动合成一个默认构建器,并发出对基础类构建
    器的调用,并且顺序是从最爷爷类-父类-子类 这样的顺序来进行的,与上一篇文章中的类初始化顺序对应。

  • 相关阅读:
    xudyh的gcd模板
    [转]vi command summary
    Uva11538 排列组合水题
    html中的块与布局
    使用bootstrap-table插件
    2015 10月16日 工作计划与执行
    2015 10月15日 工作计划与执行
    2015 10月14日 工作计划与执行
    2015 10月13日 工作计划与执行
    2015 10月12日 工作计划与执行
  • 原文地址:https://www.cnblogs.com/blackmlik/p/12360215.html
Copyright © 2020-2023  润新知