java继承 初始化顺序

 

java继承 初始化顺序

标签: 初始化顺序
 分类:

 

[java] view plaincopy
 
  1. package Study.Initialization;  
  2.   
  3. class Base{  
  4.     private String str1=init("str1");  
  5.     private String str2=init("str2");  
  6.     public static String str3=init("static str3");  
  7.       
  8.     public Base(String str1,String str2){  
  9.         System.out.println("Run Construction Base");  
  10.         this.str1=str1;  
  11.         this.str2=str2;  
  12.     }  
  13.       
  14.     protected static String init(String str){  
  15.         System.out.println(str);  
  16.         return str+" init";  
  17.     }  
  18. }  
  19.   
  20. class Derived extends Base{  
  21.     private String str4=init("str4");  
  22.     public static String str5=init("static str5");  
  23.     public Derived(String str1,String str2,String str4){  
  24.         super(str1,str2);  
  25.         System.out.println("Run Construction Derived");  
  26.         this.str4=str4;  
  27.     }  
  28. }  
  29.   
  30. public class extendInitialization {  
  31.     public static void main(String[] args) {  
  32.         System.out.println("run extendInitialization.main()");  
  33.         Derived d=new Derived("construction str1","construction str2","construction str4");   
  34.         System.out.println("----------------------------------------");  
  35.         Derived d2=new Derived("construction str11","construction str22","construction str44");   
  36.     }  
  37.   
  38. }  


 

运行结果:

run extendInitialization.main()
static str3
static str5
str1
str2
Run Construction Base
str4
Run Construction Derived
----------------------------------------
str1
str2
Run Construction Base
str4
Run Construction Derived
总结:
   Derived的初始化顺序:
    1.按定义时的顺序初始化基类的static成员
    2..按定义时的顺序初始化扩展类的static成员
    (以上两条是对第一次定义扩展类对象时运行)
    3.按定义时顺序执行基类的指定初始化
    4.执行基类的构造函数 
    5 按定义时的顺序执行扩展类的指定初始化
    6.行扩展类的构造函数
posted @ 2016-01-04 00:28  lubocsu  阅读(223)  评论(0编辑  收藏  举报