Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di dany80
    Registrato dal
    Feb 2008
    Messaggi
    119

    Ereditarietà e dichiarazioni dei metodi

    Salve ho trovato e fatto un esercizio sull'ereditarietà, ma una volta vista la soluzione mi è sorto un dubbio, vi posto qui sotto il file. Mi chiedevo perchè si omette la dichiarazione "public" nel costruttore di Rettangolo e Triangolo e negli altri metodi delle due classi? Premetto sono appredista
    codice:
    public class Figura {
    	
    	private double base;
    	private double altezza;
    	
    	
    	public Figura(double base,double altezza){
    		this.base=base;
    		this.altezza=altezza;
    	}
    
    	
    	public double area(){
    		System.out.println("L'area per un oggetto di tipo figura non è definita");
    		return 0;
    	}
    }
    //classe RETTANGOLO
    class Rettangolo extends Figura{
    	
    	double base;
    	double altezza;
    	
    	
    	Rettangolo(double base,double altezza){
    		super(base,altezza);
    		this.altezza=altezza;
                    this.base=base;
    
    		
    	}
    	
    	
    	public double area(){
    		return this.base*this.altezza;
    	}
    }
    
    
    //Classe TRIANGOLO
    class Triangolo extends Figura{
    	
    	double base;
    	double altezza;
    	
    	
    	Triangolo(double base,double altezza){
    		super(base,altezza);
    		this.base=base;
    		this.altezza=altezza;
    		
    	}
    	
    	
    	public double area(){
    		return (this.base*this.altezza)/2;
    	}
    }
    
    
    class CalcolaArea{
    	public static void main(String [] args){
    		Figura fig=new Figura(3,4);
    		Figura ret= new Rettangolo(5,6);
    		Figura tri=new Triangolo(3,5);
    		
    		
    		fig.area();
    		System.out.println(ret.area());
    		System.out.println(tri.area());
    
    	}
    }
    Dany80

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Ereditarietà e dichiarazioni dei metodi

    Originariamente inviato da dany80
    Salve ho trovato e fatto un esercizio sull'ereditarietà, ma una volta vista la soluzione mi è sorto un dubbio, vi posto qui sotto il file. Mi chiedevo perchè si omette la dichiarazione "public" nel costruttore di Rettangolo e Triangolo e negli altri metodi delle due classi? Premetto sono appredista
    codice:
    public class Figura {
    	
    	private double base;
    	private double altezza;
    	
    	
    	public Figura(double base,double altezza){
    		this.base=base;
    		this.altezza=altezza;
    	}
    
    	
    	public double area(){
    		System.out.println("L'area per un oggetto di tipo figura non è definita");
    		return 0;
    	}
    }
    //classe RETTANGOLO
    class Rettangolo extends Figura{
    	
    	double base;
    	double altezza;
    	
    	
    	Rettangolo(double base,double altezza){
    		super(base,altezza);
    		this.altezza=altezza;
                    this.base=base;
    
    		
    	}
    	
    	
    	public double area(){
    		return this.base*this.altezza;
    	}
    }
    
    
    //Classe TRIANGOLO
    class Triangolo extends Figura{
    	
    	double base;
    	double altezza;
    	
    	
    	Triangolo(double base,double altezza){
    		super(base,altezza);
    		this.base=base;
    		this.altezza=altezza;
    		
    	}
    	
    	
    	public double area(){
    		return (this.base*this.altezza)/2;
    	}
    }
    
    
    class CalcolaArea{
    	public static void main(String [] args){
    		Figura fig=new Figura(3,4);
    		Figura ret= new Rettangolo(5,6);
    		Figura tri=new Triangolo(3,5);
    		
    		
    		fig.area();
    		System.out.println(ret.area());
    		System.out.println(tri.area());
    
    	}
    }
    I modificatori d'accesso sono 4: public, protected, private e quello di default, che viene applicato quando non viene specificato nessun altro modificatore e permette l'accesso solo ai membri dello stesso package.

    Per i dettagli: http://docs.oracle.com/javase/tutori...sscontrol.html

  3. #3
    Utente di HTML.it L'avatar di dany80
    Registrato dal
    Feb 2008
    Messaggi
    119
    certo fin qui ci siamo. ho provato ad utilizzare public e mi dava errore, mi diceva che dovevo dichiarare la classe Rettangolo e Triangolo in file diversi, ma cosi potevo estendere la classe Forma. I sbirciano la soluzione ho capito che dovevo omettere la dichiarazione d'accesso, perchè cosi utilizzava quella di default, ma perchè? perchè non và con public? Grazie
    Dany80

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da dany80
    certo fin qui ci siamo. ho provato ad utilizzare public e mi dava errore, mi diceva che dovevo dichiarare la classe Rettangolo e Triangolo in file diversi, ma cosi potevo estendere la classe Forma. I sbirciano la soluzione ho capito che dovevo omettere la dichiarazione d'accesso, perchè cosi utilizzava quella di default, ma perchè? perchè non và con public? Grazie
    Riguardo al "perché" sono scelte progettuali, evidentemente chi ha pensato quel codice ha scelto quel livello d'accesso, non posso sapere perché.
    Riguardo al public, nel codice che hai messo puoi benissimo metterlo al costruttore ma per dichiarare le classi devi metterle ognuna in file diversi, come hai detto.
    Però non ho capito la frase sull'ereditarietà, puoi spiegarti meglio?

    P.S.: è buona norma avere classi top-level in file diversi.

  5. #5
    Veramente non capisco cosa intendi. Puoi benissimo mettere il modificatore public senza problemi.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ho capito, lui ha messo diverse classi in un solo file.
    In java una classe ha lo stesso nome del file (infatti hai Figura.java e la classe principale deve avere quel nome). E' possibile avere classi inner als uo interno, ma non devono essere dichiarate public, ecco l'errore.

    Se separi le classi (un file per ogni classe) e metti public non hai problemi
    RTFM Read That F*** Manual!!!

  7. #7
    Originariamente inviato da valia
    ho capito, lui ha messo diverse classi in un solo file.
    In java una classe ha lo stesso nome del file (infatti hai Figura.java e la classe principale deve avere quel nome). E' possibile avere classi inner als uo interno, ma non devono essere dichiarate public, ecco l'errore.

    Se separi le classi (un file per ogni classe) e metti public non hai problemi
    Ahh ecco, mi era sfuggita questa cosa.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it L'avatar di dany80
    Registrato dal
    Feb 2008
    Messaggi
    119
    Ecco proprio quello il problema, in compilazione mi dice che devo mettere la classe rettangolo e la classe traingolo in file diversi, se utilizzo "public". Se ometto "public" e utilizzo quello di default, inserisco tutto in un solo file come l'ho postato non mi dà errore. Perchè?
    Dany80

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    perché sono classi interne a Figura, non accessibili al di fuori del package e che proprio perché sono interne devono avere visibilità inferiore a public
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da valia
    ho capito, lui ha messo diverse classi in un solo file.
    In java una classe ha lo stesso nome del file (infatti hai Figura.java e la classe principale deve avere quel nome). E' possibile avere classi inner als uo interno, ma non devono essere dichiarate public, ecco l'errore.

    Se separi le classi (un file per ogni classe) e metti public non hai problemi
    Non ho capito, che c'entrano le inner class? Questo compila:

    codice:
    class TopLevelClass {
    
      public class InnerClass { }
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.