Definición previa: un paquete es una colección de clases que se encuentran en el mismo directorio. Las clases permiten implementar tipos de datos abstractos. El problema que se presenta es que desde cualquier clase se puede accesar los campos de un objeto perteneciente a otra clase. Esto es una violación al principio de abstracción que dice que un tipo de datos abstracto sólo puede ser manipulado a través de las operaciones que se definen para éste.

Visibilidad de Campos y Métodos

En java al definir una clase se puede controlar la visibilidad que tendrán sus campos y métodos al exterior de la clase. Este control se efectúa de la siguiente forma:

class A {

  private int privx;
  protected int protb;
  public int pubc;
  int paqd;

  private void Met Priv?() { … }
  protected void Met Prot?() { … }
  public void Met Pub?(A a)
  {
  // Un campo siempre es visible
  // en la clase en donde se define
    … privx … a.privx …
    … protb … a.protb …
    … pubc  … a.pubc …
  // Un método siempre es visible
  // en la clase en donde se define
    Met Priv(); a.Met Priv();
  }
  void Met Paq?() { … }

}

Las palabras private, protected y public son atributos de un campo o un método y su significado es el siguiente:

private: El campo o método sólo es visible dentro de la clase donde se define.

protected: El campo o método es visible en la clase en donde se define y en cualquiera de sus subclases.

public: El campo o método es visible en cualquier clase.

Ninguna de las anteriores: El campo o método es visible en cualquiera de las clases pertenecientes al paquete en donde se define. Ejemplo: class B {

  public void Met B?()
  {
    A a= new A();
    a.pubc= 1;   // Ok
    a.priva= 2;  // error, privado
    a.protb= 3;  // error, B no es
                 // subclase de A

    a.Met Pub();  // Ok
    a.Met Priv(); // error, privado
  }

}


Visibilidad de Clases Al declarar una clase se puede especificar que es pública usando el atributo public. De este modo la clase podrá ser usada por cualquier otra clase. Si la clase no es pública entonces la clase sólo puede ser usada dentro del paquete que la contiene.

public class Box extends Graph Obj { … }

Podemos hacer un resumen de los atributos que pueden tener campos, métodos o clases: Campo: private {final} {static}

Método: private final {static}

Clase: public} {final Sólo se puede especificar uno de los atributos puestos en la misma llave.


El nombre de archivo Un archivo puede contener a lo más una clase pública, en cuyo caso el nombre del archivo debe ser el mismo de la clase pública, más la extensión .java. El resto de las clases del archivo sólo serán visibles dentro del paquete. Es usual que los archivos contengan una sola clase, pero también a veces se agregan otras clases al archivo cuando éstas son usadas sólo dentro de ese mismo archivo.


Búsqueda personalizada