码迷,mamicode.com
首页 > 编程语言 > 详细

Java——继承的运行顺序

时间:2018-08-14 17:53:13      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:xtend   顺序   oid   原因   sub   bsp   变量   运行   []   

首先看一个代码

父类代码:

 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——继承的运行顺序

标签:xtend   顺序   oid   原因   sub   bsp   变量   运行   []   

原文地址:https://www.cnblogs.com/ne709/p/9475958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!