Newsgroup: it.comp.java
Titolo: [NEWBIE] Non-public class e packages

Scusate la domanda da niubbo,
ma se le classi non-public non sono visibili all'esterno del package nel
quali sono definite, ha senso definirvi metodi public o protected, visto che
comunque questi non saranno poi visibili all'esterno del package?
In pratica, in una classe non-public i metodi funzionano solo come friendly
(senza prefisso) o private? (ovvero in questo caso
public=protected=friendly)
Grazie
Xyx

 wrote in message
news:Slq07.1761$K55....@news.infostrada.it...

Scusa... chi e' il tuo spacciatore di fiducia????? :-ppp
Crì!

 Crì!
Beh, mi servivo dal tuo, ma quando passi tu non rimane nulla... :-D
mi sarò pure espresso male (e forse non ti sei impegnato a leggere :-P ), ma
non mi hai dato una grande mano.
Ripeto:
Supponiamo di avere un package.
In un file di un package ci sia una classe senza il prefisso public.
Tale classe non è accessibile all'esterno del package, GIUSTO ??
Nella classe ci sono dei metodi (ma va?), che possono avere accesso:
public (richiamabile da tutti)
protected (richiamabile da classi derivate e classi nel package - In pratica
blocca accesso da classi esterne al package non derivate)
(nulla) (metodo friendly richiamabile solo dalle classi nel package)
private (richiamabile nella classe in cui è definita).
Poiché la classe non-public non è accessibile all'esterno del package (e non
si può derivare all'esterno), allora in questo caso
public=protected=friendly   ,     o mi sbaglio?
Xyx

 
Ti dovrei rispondere "la seconda che hai detto", almeno per quanto
riguarda protected, pero`... ok, prendiamo questo esempio:
A e B sono definite nello stesso package (quello di default, o altro, e`
lo stesso)
class A {
   int a1;            // accessibile da tutte le classi del package
   protected int a2;  // accessibile da A e dalle sottoclassi di A
 
   int getA1() { return a1; }
   int getA2() { return a2; }
   void setA1( int a ) { a1 = a; }
   void setA2( int a ) { if( a >= 0 ) a2 = a; }
}
class B {
   void doSomething() {
     A a = new A();
     System.out.println( a.getA1() ); // 0
     System.out.println( a.getA2() ); // 0
     a.a1 = 10;     // corretto
     a.setA1( -1 ); // corretto
     a.a2 = 2;      // <------- a2 e` "protected" in A !! ERRORE(?)
     a.setA2( -1 ); // corretto, ma -1 < 0 per cui viene ignorato
     System.out.println( a.getA1() ); // -1
     System.out.println( a.getA2() ); // ??
   }
}
public class TeSt {
   public static void main( String[] args ) {
      new B().doSomething();
   }
}
secondo me questo dovrebbe dare errore in compilazione (A.a2 e`
protected, e B non e` certo sottoclasse di A pur appartenendo allo
stesso package -in questo caso quello di default, ma non e`
importante-),
e invece a me lo compila ed esegue tranquillamente stampando:
$java TeSt
0
0
-1
2
Idee??? (se ho scritto un'idiozia da niubbo non fucilatemi: fa
davvero troppo caldo!! :)
-- 
Ciao,  |     Gott weiss ich will kein Engel sein
Matteo |                     -- Rammstein, Engel

 ha scritto nel messaggio
news:3B447C2F...@libero.DALLO-SPAM.it...

Guarda che va tutto bene,
difatti protected offre accessibilità nelle sottoclassi ed in tutto il
package (anche alle classi NON derivate).
E' proprio questo il punto.
E ritorno alla questione di partenza
Se non dichiaro una classe public,
che differenza fa IN PRATICA dichiararvi un metodo public, protected o
friendly.
Agli effetti pratici mi sembra nessuna.
Xyx

 Xyx
