结论:静态方法和属性可以被继承,但是不能被重写。
我们将结论延伸一下:
我们知道,类的是由成员变量和方法组成的,成员变量代表类的属性,而方法则代表类的行为。
而具体根据静态与否,可以分为
1.静态的成员变量
2.非静态的成员变量
3.静态的方法
4.非静态的方法
下边给出延伸的结论:
上述的四种成员变量和方法,只有非静态的方法可以被继承并且被重写(override)
而另外的三种,静态的成员变量/方法、非静态的成员变量,只能被继承,但是不能被重写,而是被隐藏
在java中多态之所以能实现,主要依赖于继承和重写。有了继承和重写,就可以实现父类的引用指向不同的子类对象。而重写的最主要功能则是:在父类引用,调用子类重写的方法之后,调用的是子类重写的方法,也可以理解为,子类重写的方法优先级高于父类。但是对于隐藏来说,则没有这种优先级的“特权”。
下边我们来通过具体的代码来验证结论
package cn.qiaoh.inheritance; public class A { public static String staticStr = "A静态成员变量"; public String str = "A非静态成员变量"; public static void staticMethod() { System.out.println("A静态方法"); } public void method(){ System.out.println("A非静态方法"); } } package cn.qiaoh.inheritance; public class C extends A { } package cn.qiaoh.inheritance; public class B extends A{ public static String staticStr = "B静态成员变量"; public String str = "B非静态成员变量"; public static void staticMethod() { System.out.println("B静态方法"); } public void method(){ System.out.println("B非静态方法"); } } package cn.qiaoh.inheritance; import org.junit.Test; public class StaticInheritance { @Test public void test01() { A a = new C(); System.out.println(a.str); System.out.println(a.staticStr); a.staticMethod(); a.method(); //输出结果全部为父类A中的成员变量和方法,证明了静态的方法和成员变量可以被继承 } @Test public void test02() { A a = new B(); System.out.println(a.str);//A的非静态成员变量 System.out.println(a.staticStr);//A的静态成员变量 a.method();//B的成员方法 a.staticMethod();//A的静态成员方法 //只有非静态的方法成功完成了重写,另外三个都是父类的方法和变量 } } 文章来源: 静态方法和属性可以被继承吗?