Conclusion: Static properties and static methods in Java can be inherited, but they are not overwritten but hidden.
Reason:
1. Static methods and properties belong to classes. When calling, they are completed directly through class name.method name, without the need for inheritance mechanism. can be called.
If static methods and attributes are defined in the subclass, then the static methods or attributes of the parent class are called "hidden" at this time. If you want to call the static methods and properties of the parent class, you can directly use parent class name.method or variable name. As for whether to inherit, subclasses can inherit static methods. and properties, but they are not the same as instance methods and properties. There is such a situation as "hidden".
2. The reason why polymorphism can be realized depends on inheritance, interface and rewriting, and overloading (inheritance and rewriting are the most critical). With inheritance and overriding, references from the parent class can point to objects of different subclasses.
The function of rewriting is: after "rewriting", the priority of the subclass is higher than the priority of the parent class, but "hiding" does not have this priority.
Examples are as follows:
package com.study.test; public class A { //父类 public static String staticStr = "A静态属性"; public String nonStaticStr = "A非静态属性"; public static void staticMethod(){ System.out.println("A静态方法"); } public void nonStaticMethod(){ System.out.println("A非静态方法"); } }
package com.study.test; public class B extends A{//子类B public static String staticStr = "B改写后的静态属性"; public String nonStaticStr = "B改写后的非静态属性"; public static void staticMethod(){ System.out.println("B改写后的静态方法"); } }
package com.study.test; public class C extends A{//子类C继承A中的所有属性和方法 }
package com.study.test; public class StaticExtendsTest { public static void main(String[] args) { C c = new C(); System.out.println(c.nonStaticStr); System.out.println(c.staticStr); c.staticMethod();//输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以 被继承 System.out.println("-------------------------------"); A c1 = new C(); System.out.println(c1.nonStaticStr); System.out.println(c1.staticStr); c1.staticMethod();//结果同上,输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和 静态方法可以被继承 System.out.println("-------------------------------"); B b = new B(); System.out.println(b.nonStaticStr); System.out.println(b.staticStr); b.staticMethod(); System.out.println("-------------------------------"); A b1 = new B(); System.out.println(b1.nonStaticStr); System.out.println(b1.staticStr); b1.staticMethod();//结果都是父类的静态方法,说明静态方法不可以被重写,不能实现多态 } }
Recommended tutorial: javaQuick Start
The above is the detailed content of Can static methods in java be inherited?. For more information, please follow other related articles on the PHP Chinese website!