diumenge, 26 de setembre del 2010

JAVA - Accés als membres d'una classe - Part II - package i private

Continuant amb els modificadors d'accessibilitat als membres d'una classe, ens restava per veure els nivells d'accés package i private.

Nivell package. Quan no s'especifíca un modificador d'accessibilitat a un membre, aquest només és accessible per altres subclasses dins el seu propi paquet de classes.Aquest nivell d'accés és més restrictiu que el protected.
Veiem-ne un exemple:


public class SuperClassA {

int superclassVarA;
void superclassMetodeA(){


...

}

}


En aquest exemple, la variable superclassVarA i el métode superclassMetodeA han estat declarats sense el modificador, per tant, només seràn accessibles dins del mateix paquet. Té restricció de paquet.

Nivell private. És el més restrictiu de tots els nivells d'accessibilitat. Els membres privats només són accessibles per altres membres de la mateixa classe.  Els membres amb modificador private no són heretats per la subclasse. En el següent exemple veiem que tant superclassVarA com superclassMetodeA tenen el nivell d'accés private, per tant, no són accessibles des de qualsevol lloc que no sigui la mateixa classe.


public class SuperClassA {

private int superclassVarA;
private void superclassMetodeA(){


...

}

}

dissabte, 4 de setembre del 2010

JAVA - Accés als membres d'una classe - Part I - public i protected

Una classe pot controlar l'accés als seus membres (métodes o atributs) per part d'altres classes.
És a dir, pot determinar quina informació és accessible i quina no ho és. Hi ha quatre nivells diferents d'accessibilitat:
  • public
  • protected
  • default (també anomenat package)
  • private         
Si no s'especifica cap nivell, el membre, per defecte,  té accessibilitat de paquet o default.

Nivell public. És el menys restrictiu de tots els nivells. Un membre públic és accessible des de qualsevol lloc, ja sigui des del mateix paquet que conté la classe o des d'altres on aquesta classe és visible.

Nivell protected. Un membre protected és accessible en totes les classes dins del mateix paquet i per totes les subclasses de la classe en qualsevol paquet des d'on sigui visible aquesta. És a dir, classes no heretades en altres paquets no poden accedir a membres protected.
Una subclasse en un altre paquet només pot accedir a membres protected de la superclasse a través de referències del seu propi tipus o subtipus. Veiem un exemple:


// fitxer SuperClasseA.java
public class SuperClasseA {      // En el paquet packageA

protected int variableClasseA;  // membre protegit
protected void metodeClasseA () { ...}  // membre protegit

}

// fitxer subClasseB.java
package packageB;
import packageA.*;

public class subClasseB extends SuperClasseA {   // En el paquet packageB

SuperClasseA objRefA = new SuperClasseA();
void subMetodeClasseB (subClasseB objRefB){

objRefB.metodeClasseA();   // OK
objRefB.variableClasseA = 15;  // OK
objRefA.metodeClasseA();             // NO OK
objRefA.variableClasseA = 20;      // NO OK

}
}


Un membre protected d'una superclasse només és accessible per una subclasse que estigui en un altre paquet, a través de l'herència.