结论:
1.java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)
2.
父类静态方法可以被覆盖,允许在子类中定义同名的静态方法,但是没有多态。
例子:
public class MysuperTestClass { //父类 public static String staticStr = "父类静态属性"; public String nonStaticStr = "父类非静态属性"; public static void staticMethod(){ System.out.println("父类静态方法"); } public void nonStaticMethod(){ System.out.println("父类非静态方法"); } }
public class B extends MysuperTestClass {//子类B public static String staticStr = "B改写后的静态属性"; public String nonStaticStr = "B改写后的非静态属性"; public static void staticMethod(){ System.out.println("B改写后的静态方法"); } public void nonStaticMethod(){ System.out.println("B改写的非静态方法"); } public String bb; }
public class C extends MysuperTestClass { }
/** * 父类静态方法可以被覆盖,允许在子类中定义同名的静态方法,但是没有多态。 */ System.out.println("-------------------------------"); B b = new B(); System.out.println(b.nonStaticStr); System.out.println(b.staticStr); b.staticMethod(); b.nonStaticMethod(); System.out.println("-------------------------------"); MysuperTestClass b1 = new B(); System.out.println(b1.nonStaticStr); System.out.println(b1.staticStr); b1.staticMethod();//和下面的非静态方法比较,说明静态方法不可以被重写,不能实现多态 b1.nonStaticMethod();
需要先明白一下的区别:
1. MysuperTestClass b1 = new B();
B b = new B();
2.多态的含义
源码 地址: