2011-11-21 14 views
5

おはようC#またはJavaでサブクラス化するときにプライベートメンバーをオーバーライドすることはできますか?

私はC#とJavaを学んでおり、相続に関して質問があります。 スーパークラス(基本クラス)内のプライベートメンバーをオーバーライドすることは可能ですか? 私の見解では、アクセス修飾子がメンバーのアクセスを妨げるため、正しいとは限りません。

申し訳ありません...質問は愚かではないと思います。

よろしく 牡羊座生まれのクラスの

+1

愚かなく、彼のお子様のための可視方法を作るが、あなたは試みることによって5秒で自分自身を見つけることができます。さて、もしあなたが「なぜその言語はそのように定義されていますか?」ということに興味があるのであれば、それは別の問題です。 –

答えて

5

検索することができますgood websiteありますが、それは、変数を隠して別の概念を与えます。

Javaのフィールドは隠されているだけで、実際にはオーバーライドされません(これは実際にはコンパイル時にエラーが発生するという意味ではなく、実際の意味ではオーバーライドされません)。オーバーライドとは、宣言された型に基づいていない、オブジェクトの実行時の型に基づいてメンバーを呼び出す必要があることを意味します。しかし、Javaのフィールドのバインドは常に静的であり、オブジェクト参照の宣言された型のみに基づいています。動的バインディングと静的バインディングの詳細はこちら

メソッドの場合、継承されたメソッドのみがオーバーライドされるため、静的メソッドもオーバーライドされずに隠され、静的バインディングのみに従います。プライベートメンバー(メソッドまたはフィールドの両方)は、非表示もオーバーライドもされません。また、静的バインディングにも従います。サブクラスを含むクラス以外の他のクラス(サブクラスも含む)から直接アクセスすることはできません。覚えておいて、Hiddenはここではサブクラスのメンバーにアクセスできないというわけではありません。ですから、アクセスできない(私的なメンバーの場合、フィールドやメソッド)、隠されていることと混同しないでください。

4

privateの方法は、彼らが継承され得ることはありませんので、その子クラスで見えないです。

2

技術的には、オーバーライドしていません。

サブクラスに名前のメンバーがあり、スーパークラスにプライベートとしてマークされている同名のメンバーがある場合、それらは2つの異なるメンバーです。

1

いいえ、あなたはJavaまたはC#に上書きできません。あなたはC++でそれを行うことができます。

は、あなたがこれはばかげた質問ではありません:)

2

スーパークラスとサブクラスの両方が同じパッケージにある場合は、PRIVATEとFINALとしてマークされていないメソッドをオーバーライドできます.PUVICまたはPROTECTEDのメソッドをオーバーライドすることもできます最終的にはならない)。

3

いいえ、あなたは彼らが効果的に最終的だ、private要素を上書きすることはできません(彼らはサブクラスがオーバーライドされるから決して見えだから。)

あなたはサブクラスで同じ名前を持つprivate要素を宣言することができますそれはスーパークラスのものをオーバーライドしていません。スーパークラスのものと同じ名前の別のprivateメソッドです。したがって、売り言葉がここに依頼する意味がありません、保護された代わりにprivated

1

使用protectedは、唯一

+0

それはとても簡単です! – BKSpurgeon

関連する問題