おはようC#またはJavaでサブクラス化するときにプライベートメンバーをオーバーライドすることはできますか?
私はC#とJavaを学んでおり、相続に関して質問があります。 スーパークラス(基本クラス)内のプライベートメンバーをオーバーライドすることは可能ですか? 私の見解では、アクセス修飾子がメンバーのアクセスを妨げるため、正しいとは限りません。
申し訳ありません...質問は愚かではないと思います。
よろしく 牡羊座生まれのクラスの
おはようC#またはJavaでサブクラス化するときにプライベートメンバーをオーバーライドすることはできますか?
私はC#とJavaを学んでおり、相続に関して質問があります。 スーパークラス(基本クラス)内のプライベートメンバーをオーバーライドすることは可能ですか? 私の見解では、アクセス修飾子がメンバーのアクセスを妨げるため、正しいとは限りません。
申し訳ありません...質問は愚かではないと思います。
よろしく 牡羊座生まれのクラスの
検索することができますgood websiteありますが、それは、変数を隠して別の概念を与えます。
Javaのフィールドは隠されているだけで、実際にはオーバーライドされません(これは実際にはコンパイル時にエラーが発生するという意味ではなく、実際の意味ではオーバーライドされません)。オーバーライドとは、宣言された型に基づいていない、オブジェクトの実行時の型に基づいてメンバーを呼び出す必要があることを意味します。しかし、Javaのフィールドのバインドは常に静的であり、オブジェクト参照の宣言された型のみに基づいています。動的バインディングと静的バインディングの詳細はこちら
メソッドの場合、継承されたメソッドのみがオーバーライドされるため、静的メソッドもオーバーライドされずに隠され、静的バインディングのみに従います。プライベートメンバー(メソッドまたはフィールドの両方)は、非表示もオーバーライドもされません。また、静的バインディングにも従います。サブクラスを含むクラス以外の他のクラス(サブクラスも含む)から直接アクセスすることはできません。覚えておいて、Hiddenはここではサブクラスのメンバーにアクセスできないというわけではありません。ですから、アクセスできない(私的なメンバーの場合、フィールドやメソッド)、隠されていることと混同しないでください。
private
の方法は、彼らが継承され得ることはありませんので、その子クラスで見えないです。
技術的には、オーバーライドしていません。
サブクラスに名前のメンバーがあり、スーパークラスにプライベートとしてマークされている同名のメンバーがある場合、それらは2つの異なるメンバーです。
スーパークラスとサブクラスの両方が同じパッケージにある場合は、PRIVATEとFINALとしてマークされていないメソッドをオーバーライドできます.PUVICまたはPROTECTEDのメソッドをオーバーライドすることもできます最終的にはならない)。
いいえ、あなたは彼らが効果的に最終的だ、private
要素を上書きすることはできません(彼らはサブクラスがオーバーライドされるから決して見えだから。)
あなたはサブクラスで同じ名前を持つprivate
要素を宣言することができますそれはスーパークラスのものをオーバーライドしていません。スーパークラスのものと同じ名前の別のprivate
メソッドです。したがって、売り言葉がここに依頼する意味がありません、保護された代わりにprivated
愚かなく、彼のお子様のための可視方法を作るが、あなたは試みることによって5秒で自分自身を見つけることができます。さて、もしあなたが「なぜその言語はそのように定義されていますか?」ということに興味があるのであれば、それは別の問題です。 –