>  기사  >  Java  >  Java의 정적 메소드를 상속받을 수 있나요?

Java의 정적 메소드를 상속받을 수 있나요?

王林
王林원래의
2019-11-22 14:11:534516검색

Java의 정적 메소드를 상속받을 수 있나요?

결론: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.