결론: Java의 정적 속성과 정적 메서드는 상속될 수 있지만 덮어쓰지 않고 숨겨집니다.
이유:
1. 정적 메서드와 속성은 클래스에 속합니다. 호출 시 클래스 이름.메서드 이름을 통해 직접 완성되며 상속 메커니즘 없이 호출할 수 있습니다.
정적 메서드와 속성이 하위 클래스에 정의된 경우, 이때 상위 클래스의 정적 메서드나 속성은 "숨김"이라고 합니다. 상위 클래스의 정적 메서드 및 속성을 호출하려면 부모 클래스 이름.method 또는 변수 이름을 통해 직접 호출할 수 있습니다. 상속 여부는 하위 클래스가 정적 메서드 및 속성을 상속하지만 인스턴스와는 다릅니다. 메서드와 속성이 다르며 "숨겨진" 상황이 있습니다.
2. 다형성이 구현될 수 있는 이유는 상속, 인터페이스, 재작성, 오버로딩에 달려 있습니다(상속과 재작성이 가장 중요합니다). 상속 및 재정의를 통해 부모 클래스의 참조는 다른 하위 클래스의 개체를 가리킬 수 있습니다.
다시 쓰기의 기능은 다음과 같습니다. "다시 쓰기" 후에 하위 클래스의 우선순위가 상위 클래스의 우선순위보다 높지만 "숨기기"에는 이 우선순위가 없습니다.
예제는 다음과 같습니다.
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();//结果都是父类的静态方法,说明静态方法不可以被重写,不能实现多态 } }
추천 튜토리얼: java Quick start
위 내용은 Java의 정적 메소드를 상속받을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!