Java のフレンド クラス

Sheeraz Gul 2023年10月12日
Java のフレンド クラス

フレンド クラスは、クラスの非パブリック メンバーにアクセスするために使用される C++ の機能です。 Java は friend キーワードをサポートしていませんが、機能を実現できます。

このチュートリアルでは、Java でフレンド クラスを作成する方法を示します。

Java のフレンド クラス

フレンドの概念は、Java でも実装できます。 たとえば、会社の異なる部門に所属する 2 人の同僚です。

両方の同僚はお互いを知りませんが、仕事のために協力する必要があります。 友人のパターンに基づいて、1 人の従業員を Jack として、もう 1 人を Michelle として設定します。

この例を実装するには、2つのパッケージを作成し、両方のクラスを実装する必要があります。

Department(package) Delftstack1 のクラス Jack:

package Delftstack1;

import Delftstack2.Michelle;

public final class Jack {
  static {
    // Declare classes in the Delftstack2 package as 'friends'
    Michelle.setInstance(new Michelle_Implement());
  }

  // Constructor is Only accessible by 'friend' classes.
  Jack() {}

  // This Method is Only accessible by 'friend' classes.
  void HelloDelftstack() {
    System.out.println("Hello! I am Jack from Delftstack");
  }

  static final class Michelle_Implement extends Michelle {
    protected Jack createJack() {
      return new Jack();
    }

    protected void sayHello(Jack jack) {
      jack.HelloDelftstack();
    }
  }
}

Department(package) Delftstack2 のクラス Michelle:

package Delftstack2;

import Delftstack1.Jack;

public abstract class Michelle {
  private static Michelle instance;

  static Michelle getInstance() {
    Michelle a = instance;
    if (a != null) {
      return a;
    }

    return createInstance();
  }

  private static Michelle createInstance() {
    try {
      Class.forName(Jack.class.getName(), true, Jack.class.getClassLoader());
    } catch (ClassNotFoundException e) {
      throw new IllegalStateException(e);
    }

    return instance;
  }

  public static void setInstance(Michelle michelle) {
    if (instance != null) {
      throw new IllegalStateException("Michelle instance already set");
    }

    instance = michelle;
  }

  protected abstract Jack createJack();

  protected abstract void sayHello(Jack jack);
}

main メソッドを実装するクラス:

package Delftstack2;

import Delftstack1.Jack;

public final class Friend_Class {
  public static void main(String[] args) {
    Michelle michelle = Michelle.getInstance();
    Jack jack = michelle.createJack();
    michelle.sayHello(jack);
  }
}

上記のコードは、Java でフレンド クラス機能を実装し、2つのクラスが異なるパッケージに含まれています。 クラス Michelle は、クラス Jack メンバーにアクセスするフレンド クラスとして機能します。

出力:

Hello! I am Jack from Delftstack
著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

関連記事 - Java Class