1

클래스가 메소드를 동기화 한 경우 해당 서브 클래스도 상속되거나 하위 클래스에 의해 재정의 되든 동일한 동기화 된 메소드를 갖습니까? 동기화 된 메소드 상속 및 오버라이드

구체적

,

  • 레거시 Vector 방법은 동기화 있으며, StackVector의 서브 클래스이다. Stack도 메소드를 동기화합니까?

  • 레거시 Hashtable은 동기화 된 메소드를 가지고 있으며, PropertiesHashtable의 서브 클래스입니다. Properties도 메소드를 동기화합니까? 내 질문

동기 부여는 What are the replacements for legacy collections `Stack` and `Properties`?

감사에서입니다.

+2

메서드의 'synchronized'속성이 상속 된 이유 때문에 사라지는 이유는 무엇입니까? – Kayaman

+0

누구나 특정 컬렉션'Stack'과'Properties'에 내 질문에 답하고 싶습니까? – Ben

+2

@Ben 특정 컬렉션 클래스에 대한 질문에 답하는 것은 의미가 없습니다. 그것은 모든 수업에 대해 동일한 대답입니다. –

답변

1

하위 클래스는 수퍼 클래스에서 모든 멤버 (필드, 메서드 및 중첩 클래스)를 상속합니다. 생성자는 멤버가 아니므로 하위 클래스에 상속되지 않지만 슈퍼 클래스의 생성자는 하위 클래스에서 호출 할 수 있습니다.

그러나 하위 클래스는 상위 클래스의 개인 멤버를 상속하지 않습니다. 다만, 슈퍼 클래스가 그 비공개 필드에 액세스하기위한 public 또는 protected 메소드를 가지고있는 경우, 서브 클래스에서도 사용할 수 있습니다.

그래서 동기화 된 메소드는 서브 클래스에 의해 상속됩니다. 자세한 내용은 javadoc을 참조하십시오.

+2

이 답변의 처음 3/4가 질문에 대답하는 것과 관련이 있는지 모르겠습니다. – nickb

+0

http://gee.cs.oswego.edu/dl/cpj/mechanics.html에서는 synchronized가 상속되지 않는다고 말합니다. –

+0

모두에게 상속을 설명하려고합니다. – Batty

5

클래스에 동기화 된 메서드가있는 경우 해당 하위 클래스도 상속되거나 하위 클래스에 의해 재정의 되든 동기화 된 메서드가 동일합니까?

수퍼 클래스의 메소드 synchronized

synchronized 방법 및 그 반대 등의 서브 클래스에서 재정의 될 수있다.

하위 클래스가 synchronized 메서드를 재정의하지 않고 단순히 상속하는 경우 메서드는 그대로 synchronized 메서드로 상속됩니다.

나는 우리가 동기화 대체 스택에 대한 속성

StackProperties 그 방법의 대부분이 있다는 의미에서 스레드 안전 클래스는 찾을 필요가 있는지 궁금 상속 방법을 포함 synchronized (Vector/Hashtable). 그렇다고해서 다중 스레드 환경에서 잘못 사용되는 것을 막을 수는 없습니다.

관련 문제