Java:public e private(class)
ciao ragazzi!
qualcuno saprebbe spiegarmi la differenza tra public class e private class,sia concettualmente che praticamente(cosa comporta in pratica al programma)?
sul libro non ho trovato niente di esaustivo,tantomeno sulle dispense del prof!
grazie mille!

qualcuno saprebbe spiegarmi la differenza tra public class e private class,sia concettualmente che praticamente(cosa comporta in pratica al programma)?
sul libro non ho trovato niente di esaustivo,tantomeno sulle dispense del prof!
grazie mille!
Risposte
Con public, la classe e' visibile in tutti i pacchetti. Invece non puoi dichiarare una classe di top-level privata; deve essere annidata dentro un'altra classe, cioe' diventa un membro. E in quel caso valgono le proprieta' private dei membri.
intanto grazie tom..
in ogni modo,considera che io devo sostenere un esame di fondamenti di informatica e programmazione,viene da se che sulle specifiche non sono ferrato.ad esempio questo top-level non so cos'è!
onde evitare perdite di tempo "bilaterali"
la domanda che ti faccio è:
a livello pratico del programma,cosa cambia se dichiaro una public class o una private class?
in ogni modo,considera che io devo sostenere un esame di fondamenti di informatica e programmazione,viene da se che sulle specifiche non sono ferrato.ad esempio questo top-level non so cos'è!
onde evitare perdite di tempo "bilaterali"

a livello pratico del programma,cosa cambia se dichiaro una public class o una private class?
Se una classe e' dichiarata pubblica, essa sara' visibile in tutti i pacchetti, ripeto; cioe' la puoi usare dove ti pare nel progetto.
Ora, per la keyword private, prendiamo questo esempio.
con l'ipotesi che la classe Saluto non si trovi dentro nessun'altra classe (cioe' che sia di top-level, appunto). Saluto puoi dichiararla solo pubblica, non privata. Se lasci il tutto cosi' com'e', allora quella classe sara' visibile solo dentro quel pacchetto.
La classe Ciao, invece, si trova annidata in Saluto, quindi e' un membro di Saluto. E, come tutti i membri di una classe, puo' essere dichiarata privata. E, come ben saprai, i membri privati non sono accessibili in maniera diretta dall'esterno della classe. In pratica, non puoi scrivere all'esterno della classe Saluto.Ciao.
ps: c'e' anche la keyword protected, ma non l'ho spiegata per semplicita'
Ora, per la keyword private, prendiamo questo esempio.
class Saluto { class Ciao {}; };
con l'ipotesi che la classe Saluto non si trovi dentro nessun'altra classe (cioe' che sia di top-level, appunto). Saluto puoi dichiararla solo pubblica, non privata. Se lasci il tutto cosi' com'e', allora quella classe sara' visibile solo dentro quel pacchetto.
La classe Ciao, invece, si trova annidata in Saluto, quindi e' un membro di Saluto. E, come tutti i membri di una classe, puo' essere dichiarata privata. E, come ben saprai, i membri privati non sono accessibili in maniera diretta dall'esterno della classe. In pratica, non puoi scrivere all'esterno della classe Saluto.Ciao.
ps: c'e' anche la keyword protected, ma non l'ho spiegata per semplicita'
in pratica,sempre in questo caso,alla classe saluto possiamo ad esempio aggiungere metodi,mentre per la classe ciao,non possiamo adoperare in tal senso...
Ehm? In che senso non puoi aggiungere metodi?
forse non ci siamo intesi...anzi sicuramente...
alla classe ciao posso "arrivarci" solo tramite la classe saluto,è quindi privata nel senso che è contenuta solo all'interno di un'altra classe...
ora ho altri due quesiti:
1)
cosa intendi per "scrivere"?
2)supponiamo di dichiarare una classe privata così:
private class Programma [
\\poi inserisco il metodo che voglio esempio
public static void main ()
[
System.out.println("benvenuti")
]
]
(ovviamente le quadre intendile graffe!)
cosa succede?se avessi dichiarato una public class,cosa cambiava?ci sono incongruenze in quello che ho scritto?
grazie per la pazienza!
alla classe ciao posso "arrivarci" solo tramite la classe saluto,è quindi privata nel senso che è contenuta solo all'interno di un'altra classe...
ora ho altri due quesiti:
1)
In pratica, non puoi scrivere all'esterno della classe Saluto.Ciao.
cosa intendi per "scrivere"?
2)supponiamo di dichiarare una classe privata così:
private class Programma [
\\poi inserisco il metodo che voglio esempio
public static void main ()
[
System.out.println("benvenuti")
]
]
(ovviamente le quadre intendile graffe!)
cosa succede?se avessi dichiarato una public class,cosa cambiava?ci sono incongruenze in quello che ho scritto?
grazie per la pazienza!
Vedo che non hai ben capito.
La classe Ciao e' privata solo se la dichiari tu privata, cioe' se scrivi
In questo modo, non si puo' accedere al membro Ciao dall'esterno di Saluto. Cioe', appunto, non puoi scrivere una cosa del genere
allora la classe Ciao e' anch'essa accessibile nel pacchetto e puoi accedervi scrivendo Saluto.Ciao
2) Come ti ho detto prima (:D), non puoi dichiarare una classe non annidata privata. Quindi o fai l'ipotesi che la classe Programma si trovi dentro un'altra classe, o devi togliere il private (cosi' Programma e' visibile solo nel pacchetto), o ci aggiungi public (cosi' e' visibile dovunque).
La classe Ciao e' privata solo se la dichiari tu privata, cioe' se scrivi
class Saluto { private class Ciao{}; };
In questo modo, non si puo' accedere al membro Ciao dall'esterno di Saluto. Cioe', appunto, non puoi scrivere una cosa del genere
Saluto.Ciaodall'esterno di Saluto. Invece se hai
class Saluto { public class Ciao{}; };
allora la classe Ciao e' anch'essa accessibile nel pacchetto e puoi accedervi scrivendo Saluto.Ciao
2) Come ti ho detto prima (:D), non puoi dichiarare una classe non annidata privata. Quindi o fai l'ipotesi che la classe Programma si trovi dentro un'altra classe, o devi togliere il private (cosi' Programma e' visibile solo nel pacchetto), o ci aggiungi public (cosi' e' visibile dovunque).
con saluto.ciao intendi la possibilità di richiamare la classe in un altro eventuale programma,immagino...
capito bene o male il concetto...il problema è che il libro dice di approfondire il concetto al capitolo 9,ma per quello che il prof ci ha assegnato,il cap 9 nemmeno lo sfioriamo!
ma,ad ogni modo,in linea di massima volevo capire quale diavolo era la differenza,dato che non sono un fan degli esercizi meccanici!
capito bene o male il concetto...il problema è che il libro dice di approfondire il concetto al capitolo 9,ma per quello che il prof ci ha assegnato,il cap 9 nemmeno lo sfioriamo!
ma,ad ogni modo,in linea di massima volevo capire quale diavolo era la differenza,dato che non sono un fan degli esercizi meccanici!