2017-11-21 19 views
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

サブクラスは、そのスーパークラスからすべてのメンバー(フィールド、メソッド、およびネストされたクラス)を継承します。コンストラクターはメンバーではないので、サブクラスによって継承されませんが、スーパークラスのコンストラクターはサブクラスから呼び出すことができます。

ただし、サブクラスはその親クラスのプライベートメンバーを継承しません。ただし、スーパークラスがプライベートフィールドにアクセスするための公開メソッドまたは保護メソッドを持っている場合は、サブクラスでもこれらを使用できます。

したがって、同期メソッドはサブクラスによって継承されます。詳細はjavadocをご覧ください。

+2

この回答の最初の3/4が質問に答えるために何をしなければならないのか分かりません。 – nickb

+0

http://gee.cs.oswego.edu/dl/cpj/mechanics.htmlはsynchronizedが継承されないと示しています。 –

+0

すべてで継承を説明しようとしています。 – Batty

5

クラスにメソッドが同期化されている場合、単純に継承されているかサブクラスによってオーバーライドされているかにかかわらず、そのサブクラスも同じ同期メソッドを持ちますか?

スーパークラスから​​方法は、非​​方法及びその逆のようにサブクラスでオーバーライドすることができます。

サブクラスが​​メソッドをオーバーライドせず、単に継承する場合、メソッドはそのまま​​メソッドとして継承されます。

私たちは同期スタックの代わり プロパティ

StackPropertiesを見つける必要があるかどうかを思っていた彼らの方法のほとんどは継承されたメソッドを含む​​(であるという意味で、スレッドセーフなクラスですVector/Hashtable)。しかし、それでもマルチスレッド環境で誤って使用されることはありません。

関連する問題