zoukankan      html  css  js  c++  java
  • 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

    1.示例程序

     1 class Root
     2 {
     3     static{
     4         System.out.println("Root的静态初始化块");
     5     }
     6     {
     7         System.out.println("Root的普通初始化块");
     8     }
     9     public Root()
    10     {
    11         System.out.println("Root的无参数的构造器");
    12     }
    13 }
    14 class Mid extends Root
    15 {
    16     static{
    17         System.out.println("Mid的静态初始化块");
    18     }
    19     {
    20         System.out.println("Mid的普通初始化块");
    21     }
    22     public Mid()
    23     {
    24         System.out.println("Mid的无参数的构造器");
    25     }
    26     public Mid(String msg)
    27     {
    28         //通过this调用同一类中重载的构造器
    29         this();
    30         System.out.println("Mid的带参数构造器,其参数值:" + msg);
    31     }
    32 }
    33 class Leaf extends Mid
    34 {
    35     static{
    36         System.out.println("Leaf的静态初始化块");
    37     }
    38     {
    39         System.out.println("Leaf的普通初始化块");
    40     }    
    41     public Leaf()
    42     {
    43         //通过super调用父类中有一个字符串参数的构造器
    44         super("Java初始化顺序演示");
    45         System.out.println("执行Leaf的构造器");
    46     }
    47 
    48 }
    49 
    50 public class TestStaticInitializeBlock
    51 {
    52     public static void main(String[] args) 
    53     {
    54         new Leaf();
    55     }
    56 }

    2.运行结果

    3.结果分析

    代码中首先创建了一个root类,再创建了一个mid类继承了root类,又创建了一个leaf类继承了mid类,在main方法中创建子类。

    从以上结果可以反映出当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。同时还反映了不同的初始化方法其执行顺序的区别。

  • 相关阅读:
    MSP430开学的序章
    此地不留爷,自有留爷处
    【javascript】继承
    【css】css3属性
    【计划】合格的前端
    【grunt】grunt 基础学习
    【防火墙】防火墙分类,过滤流程
    【js】name 与 array 的纠葛
    【TRICK】解决锚点定位向下浮动Xpx问题
    【性能】web提升性能的小总结
  • 原文地址:https://www.cnblogs.com/weipinggong/p/4887021.html
Copyright © 2011-2022 走看看