今天研究了一下被static修飾的變量和方法,在子類中繼承的問題,網上也看了別人的博客,自己也動手試了一下
代碼如下
1 //父類 2 package com.xujingyang.test; 3 4 public class Father { 5 public static String staticString="父類中的靜態變量"; 6 public String str="父類中的非靜態變量"; 7 8 public static void staticMethod(){ 9 System.out.println("父類中的靜態方法"); 10 } 11 public void nostaticMethod() { 12 System.out.println("父類中的非靜態方法"); 13 } 14 } 15 16 17 //子類 18 package com.xujingyang.test; 19 20 public class Son extends Father { 21 public static String staticString="子類中的靜態變量"; 22 public String str="子類中的非靜態變量"; 23 24 public static void staticMethod(){ 25 System.out.println("子類中的靜態方法"); 26 } 27 public void nostaticMethod() { 28 System.out.println("子類中的非靜態方法"); 29 } 30 } 31 32 33 34 //子類 35 36 package com.xujingyang.test; 37 38 public class A extends Father{ 39 40 } 41 42 43 44 45 //測試方法 46 package com.xujingyang.test; 47 48 public class Test { 49 public static void main(String[] args) { 50 Son son=new Son(); 51 System.out.println(son.str); 52 System.out.println(son.staticString); 53 son.staticMethod(); 54 son.nostaticMethod(); 55 System.out.println("=============================="); 56 Father f=new Son(); 57 System.out.println(f.str); 58 System.out.println(f.staticString); 59 f.staticMethod(); 60 f.nostaticMethod(); 61 System.out.println("=============================="); 62 A f2=new A(); 63 System.out.println(f2.str); 64 System.out.println(f2.staticString); 65 f2.staticMethod(); 66 f2.nostaticMethod(); 67 } 68 }
結果如下:
得出如下結論:父類中的靜態成員變量和方法是可以被子類繼承的,但是不能被自己重寫,無法形成多態.
我發現,變量時無法形成多態的,網上別人說,子類把父類的變量繼承過來,內存中會存在兩個同名的變量,父類的變量會出現在子類變量之前.如下圖: