ホームページ >バックエンド開発 >C++ >Java で C のフレンド概念をシミュレートするにはどうすればよいでしょうか?

Java で C のフレンド概念をシミュレートするにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 00:19:111011ブラウズ

How Can We Simulate C  's Friend Concept in Java?

トリックを使用した Java での C 'フレンド' 概念のシミュレーション

C では、'フレンド' 概念により、さまざまなパッケージのクラスで次のことが可能になります。お互いのプライベートメンバーにアクセスします。 Java には、この概念に直接相当するものはありません。ただし、「友達」関係をシミュレートするために賢いトリックを使用できます。

次のシナリオを考えてみましょう: パッケージ 'montague' 内のクラス 'Romeo' は、パッケージ内のクラス 'Juliet' の非パブリック メソッドにアクセスする必要があります。 「ロミオ」を「ジュリエット」のサブクラスにすることなく「キャピュレット」。

解決策:

  • 'Juliet' は、型 'Romeo.Love' の引数を取る静的メソッド 'cuddle' を宣言します。
  • 'Romeo' は内部クラス ' を作成します。 Love' は、プライベート コンストラクターと 'love' という静的最終インスタンスを持ちます。
  • 'Romeo' は、 'love' インスタンスを引数として 'Juliet.cuddle' を呼び出す静的メソッド 'cuddleJuliet'。

仕組み:

  • 「Romeo.Love」クラスはパブリックですが、そのコンストラクターはプライベートです。これにより、Romeo だけが「Love」のインスタンスを作成できることが保証されます。
  • 「Juliet.cuddle」メソッドはパブリックですが、引数として「Romeo.Love」インスタンスが必要です。
  • By 「love」インスタンスで「Juliet.cuddle」を呼び出すと、「Romeo」は次の非パブリック メソッドにアクセスできます。 'Juliet'.

基本的に、'Romeo.Love' は、他のクラスが 'Juliet' の非公開メンバーにアクセスするのを防ぐ「セキュリティ署名」として機能します。このトリックは、「ロミオ」が互いのサブクラスにせずに「ジュリエット」のプライベート機能にアクセスできるようにすることで、Java の「友達」の概念をシミュレートします。

以上がJava で C のフレンド概念をシミュレートするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。