zoukankan      html  css  js  c++  java
  • 【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()创建一个构建器,编译器也会为我们自动合成一个默认构建器,并发出对基础类构建
    器的调用,并且顺序是从最爷爷类-父类-子类 这样的顺序来进行的,与上一篇文章中的类初始化顺序对应。

  • 相关阅读:
    智慧养老民政监管平台建设方案
    CF600E Lomsat gelral dsu on tree
    dsu on tree详解
    【Spring 从0开始】Spring5 新功能,整合日志框架 Log4j2
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 数据库事务参数
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 操作数据库
    【Spring 从0开始】AOP 操作
    【Spring 从0开始】AOP 操作中的相关术语、环境准备
  • 原文地址:https://www.cnblogs.com/blackmlik/p/12360215.html
Copyright © 2011-2022 走看看