Concetto di classe pubblica

di il
4 risposte

Concetto di classe pubblica

Salve a tutti, sono nuovo nell'ambito della programmazione in Java, per ora si può dire che non ho neanche scalfito la superficie. Ho svolto un piccolo esercizio, per la cui banalità mi scuso in anticipo, abbiate pazienza:
Viene fornita la seguente classe
public class numeroIntero {
   public int numeroIntero;
  
   public void stampaNumero() {
   System.out.println(numeroIntero);
  }
}
Il compito consiste nell'istanziare almeno due oggetti dalla classe numeroIntero, aggiungendo un costruttore alla classe numeroIntero che inizializzi la variabile di istanza. La mia prima risoluzione dell'esercizio è stata la seguente:
public class numeroIntero {
 
 public int numeroIntero;
 
//aggiungo un costruttore che inizializzi la variabile di istanza
public numeroIntero(int x){
      numeroIntero = x;
   }

public void stampaNumero() {
  System.out.println(numeroIntero);
   }
  }

 public class istanziaOggetto{

 public static void main(String[ ] args){

    numeroIntero x = new numeroIntero(5);
    numeroIntero y = new numeroIntero(10);    
    x.stampaNumero();
    y.stampaNumero();
    } 
}
Qui ho preso il primo scivolone, perchè in fase di esecuzione (dal prompt dei comandi) viene evidenziato che la classe numeroIntero è pubblica e dovrebbe essere istanziata in un file numeroIntero.java. Facendo un po' di ricerca mi è parso di capire che in un singolo file.java non può esserci più di una classe pubblica (quindi non vale anche per i metodi o i costruttori giusto?). Il motivo, se qualcuno può mi corregga, è che la JVM cerca il metodo main per poter eseguire il programma, però si aspetta di trovarlo solo e soltanto nella classe con modificatore public ? Inoltre in un programma Java più avanzato mi aspetto ci siano più classi nello stesso file, quindi se solo una di queste può essere pubblica, significa semplicemente che le altre saranno accessibili solo e soltanto in quel file dove sono contenute ? Cioè, non le posso importare ?

4 Risposte

  • Re: Concetto di classe pubblica

    Daxcota ha scritto:


    in fase di esecuzione (dal prompt dei comandi) viene evidenziato che la classe numeroIntero è pubblica e dovrebbe essere istanziata in un file numeroIntero.java. Facendo un po' di ricerca mi è parso di capire che in un singolo file.java non può esserci più di una classe pubblica
    Un singolo sorgente può contenere più definizioni di classi/interfacce/enum/annotation. Ma solo una può essere public. E' una regoletta di Java.
    E l'altra regoletta associata alla precedente è che se c'è tale tipo public, allora il nome del sorgente (estensione ".java" esclusa) deve corrispondere esattamente (maiuscolo/minuscolo esatto) al nome di quel tipo public.

    Daxcota ha scritto:


    (quindi non vale anche per i metodi o i costruttori giusto?)
    Nella regoletta detta sopra, non c'entrano i metodi/costruttori.

    Daxcota ha scritto:


    la JVM cerca il metodo main per poter eseguire il programma, però si aspetta di trovarlo solo e soltanto nella classe con modificatore public ?
    No, il main(String[] args) può anche essere in una classe con il livello di accesso default (=package). Il main funziona ugualmente, non è quello il punto.

    Daxcota ha scritto:


    Inoltre in un programma Java più avanzato mi aspetto ci siano più classi nello stesso file
    Per programmini di prova/esempio/esercizio può anche andare bene definire più tipi nello stesso sorgente. Ma per progetti "seri" e/o grandi, la convenzione è di applicare sempre l'equivalenza 1 tipo <-> 1 sorgente.

    Daxcota ha scritto:


    significa semplicemente che le altre saranno accessibili solo e soltanto in quel file dove sono contenute ? Cioè, non le posso importare ?
    Non le puoi importare da altri package. Ma una classe top-level che non è public, ha il livello di accesso package, quindi è sì usabile da altre classi ma solo all'interno dello stesso package.

    Consiglio: fai anche man mano i miei quiz Java che vedi in firma. Sono utili.
  • Re: Concetto di classe pubblica

    Perfetto, ringrazio sia della risposta a tutti i dubbi e dei quiz che sto facendo adesso. Avendo fatto nella maggior parte dei corsi programmazione in linguaggio C, studiare quella orientata agli oggetti non mi sta riuscendo proprio egregiamente. Per esempio il concetto di classe l'ho subito associato a quello di funzione in C, pensando che magari la sola differenza è che i parametri di ingresso e uscita vanno passate ai metodi e non alla classe che li contiene. Ma comincio a sospettare andando avanti che anche questo sia sbagliato. Cioè l'idea che ci sia una classe "principale" che chiama altre classi non è corretto ? Nella sostanza mi sembra veramente simile.
  • Re: Concetto di classe pubblica

    Daxcota ha scritto:


    Per esempio il concetto di classe l'ho subito associato a quello di funzione in C
    No, è sbagliato. In C si è abituati a lavorare con puntatori e strutture (struct), quindi tipicamente si passa ad esempio ad una funzione un puntatore ad una struttura per fare qualcosa o per ottenere informazioni da quella struttura.

    Es. in C si fa ad esempio (variabile persona di tipo struttura con anno nascita, ecc...):

    if (isMaggiorenne(&persona)) { .... } // C

    In Java invece gli oggetti sono delle entità che contengono dati e funzioni (che si chiamano "metodi"). Quindi quella che in C è una struttura, in Java è un oggetto che contiene i dati e su cui puoi invocare dei metodi che operano su quei dati incapsulati nell'oggetto.
    Pertanto:

    if (persona.isMaggiorenne()) { .... } // Java

    Daxcota ha scritto:


    Cioè l'idea che ci sia una classe "principale" che chiama altre classi non è corretto ? Nella sostanza mi sembra veramente simile.
    Se si tratta di una applicazione "standalone" che parte con il main(), una classe principale c'è, appunto quella con il main() perché è da lì che parte l'applicazione. Ma il senso è solo questo.
  • Re: Concetto di classe pubblica

    Ancora grazie; era questa distinzione che mi mancava per cercare di separare i concetti alla base sui modi di ragionare differenti. A questo punto meglio fare finta di lasciar perdere quello che so sulla programmazione strutturata mentre studio Java
Devi accedere o registrarti per scrivere nel forum
4 risposte