Clase de amigo en Java

Sheeraz Gul 12 octubre 2023
Clase de amigo en Java

La clase amiga es la funcionalidad de C++, que se utiliza para acceder a los miembros no públicos de una clase. Java no admite la palabra clave amigo, pero podemos lograr la funcionalidad.

Este tutorial demuestra cómo crear una clase amiga en Java.

Clase de amigo en Java

El concepto de amigo también se puede implementar en Java. Por ejemplo, dos compañeros de diferentes departamentos de una empresa.

Ambos colegas no se conocen, pero necesitan cooperar para algún trabajo. Establezcamos a un empleado como Jack y al otro como Michelle según un patrón de amigos.

Necesitamos crear dos paquetes e implementar ambas clases para implementar este ejemplo.

La clase Jack en el Departamento(paquete) Delftstack1:

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();
    }
  }
}

La clase Michelle en el Departamento(paquete) Delftstack2:

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);
}

La clase para implementar el método principal:

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);
  }
}

El código anterior implementa la funcionalidad de clase amiga en Java con dos clases en diferentes paquetes. La clase Michelle actúa como una clase amiga que accede a los miembros de la clase Jack.

Producción :

Hello! I am Jack from Delftstack
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

Artículo relacionado - Java Class