을 상속 :자바는 방법 질문
class A{
private static String staticProperty = " a ";
String getStaticProperty() { return staticProperty; }
}
class B extends A {
private static String staticProperty = " b ";
public static void main(String[] args){
new B().go(new A());
}
void go(A t){
String s = t.getStaticProperty() + B.staticProperty + staticProperty + (new B().getStaticProperty());
System.out.println(s);
}
}
출력 무엇입니까? 내가 완벽하게 a b b
을 이해하지만, "A"의 말을 이해하지 못하는 a b b a
출력은 여기에있다. 메서드를 상속하면 (이 경우 B는 A에서 getStaticProperty()를 상속하고 해당 메서드는 부모에서 정적 변수 (staticProperty)를 반환합니다.이 정적 변수는 자식에서 다시 정의하므로 부모 정적 변수를 항상 사용합니다 값??
그런데 정적 식별자를 제거하고 staticField를 클래스의 인스턴스 멤버로 만들면 같은 결과가 반환됩니다. 개인에서 공용으로 액세스 수정자를 수정하면 동일한 결과가 리턴됩니다. 내가보고 싶었던 것을 얻기 위해 getStaticProperty 메소드를 오버라이드해야했습니다.
그래서 B가 A에서 getStaticProperty() 메소드를 상속 받았을 때 (그리고 결과적으로 B가 자신을 선언 한 것처럼)이 상속 된 메소드는 여전히 수퍼 클래스의 속성을 참조하고 있습니까? 회원 이름과 충돌이 있습니다. 아마도 B의 staticProperty가 다른 이름을 가진다면 상황이 더 쉽게 보일 것입니다. – Dan