Java——继承的运行顺序

Posted ne709

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对象

 

总结:
  继承结构在内存中运行步骤:
  父类静态变量以及静态程序块 --- 子类的静态变量以及静态程序块 ---(子类主方法)--- 父类非静态代码块 --- 父类初始化---父类中构造方法 --- 子类中非静态代码块 --- 子类初始化---子类中构造方法 --- 对象调用的方法

 






以上是关于Java——继承的运行顺序的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

java 代码片段

java代码执行顺序

Java类继承关系中的初始化顺序

Java 基础:继承中的执行顺序

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺