今天研究了一下被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 }
结果如下:
得出如下结论:父类中的静态成员变量和方法是可以被子类继承的,但是不能被自己重写,无法形成多态.
我发现,变量时无法形成多态的,网上别人说,子类把父类的变量继承过来,内存中会存在两个同名的变量,父类的变量会出现在子类变量之前.如下图: