zoukankan      html  css  js  c++  java
  • Java——继承的运行顺序

    首先看一个代码

    父类代码:

     1 public class Parent {
     2     
     3     {
     4         System.out.println("Parent非静态代码块");                
     5     }
     6     
     7     static {
     8         System.out.println("Parent静态代码块");
     9     }
    10 
    11     public String name;
    12 
    13     
    14     public Parent() {
    15         this.name = "小明";
    16 //        play1();
    17         play();
    18     }
    19     
    20 //    public void play1() {
    21 //        System.out.println(name +"在Parent类中玩游戏!!!");
    22 //    }
    23     
    24     public void play() {
    25         System.out.println(name +"在Parent类中玩游戏!!!");
    26     }
    27 }

    子类代码:

     1 public class Sub extends Parent{
     2     
     3     {
     4         System.out.println("Sub非静态代码块");                
     5     }
     6     
     7     static {
     8         System.out.println("Sub静态代码块");
     9     }
    10 
    11     public String name;
    12     
    13     public Sub(String name) {
    14         super();
    15         this.name = name;
    16     }
    17     
    18     public void play() {
    19         System.out.println(name +"在Sub类中玩游戏!!!");
    20     }
    21 }

    main方法代码:

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         
     5 //        System.out.println("========主方法========");
     6         
     7         Sub sub = new Sub("小强");
     8                         
     9         sub.play();
    10         
    11         
    12     }
    13 

    运行的结果是:Parent静态代码块
           Sub静态代码块
           Parent非静态代码块
           null在Sub类中玩游戏!!!
           Sub非静态代码块
           小强在Sub类中玩游戏!!!

    其中有几个点需要注意:

    (1)输出null的原因是当时name还没有进行初始化(sub.name)

    (2)而play()运行出来sub的原因是没有parent对象

    总结:
      继承结构在内存中运行步骤:
      父类静态变量以及静态程序块 --- 子类的静态变量以及静态程序块 ---(子类主方法)--- 父类非静态代码块 --- 父类初始化---父类中构造方法 --- 子类中非静态代码块 --- 子类初始化---子类中构造方法 --- 对象调用的方法
  • 相关阅读:
    HTTP状态码
    firefox浏览器新建页面一直处于刷新状态解决方法
    firefox浏览器需要新建窗口时以新建标签页代替
    bash基础教程
    sqoop的导入|Hive|Hbase
    sqoop导出数据|Hive|HDFS和脚本编写
    sqoop安装
    sqoop简介和原理分析
    Oozie安装
    Oozie框架介绍
  • 原文地址:https://www.cnblogs.com/ne709/p/9475958.html
Copyright © 2011-2022 走看看