Un aiuto sull'incapsulamento

di il
4 risposte

Un aiuto sull'incapsulamento

Buona notte a tutti :
Avrei bisogno di un aiuto che per me è una cosa grossa ma per esperti come Voi sarà una stupidaggine.
Sto studiando Java da vecchietto, con dei manuali Favolosi, ma ho un esempio che non mi risolve.
In un esempio del manuale " Java completa di Herbert Schildt" mi si propone un esempio riguardante l'utilizzo di "super"
Per motivi di semplicità l'esempio è fatto senza incapsulamento. Il mio problema : eseguo l'esempio senza incapsulamento
ed è tutto OK. Voglio provare a rifarlo con l'incapsulamento e non riesco a compilare il programmino perché non riesco a far funzionare
un metodo semplicissimo. Riporto il programmino di esempio senza incapsulamento che è OK e quello fatto da me che non riesco a compilare:
 
 
 // Questo programmino tutto OK
 public class MiaClasse_A_1 {
    public int m;  
}

public class MiaClasse_B_1 extends MiaClasse_A_1 {
    public int m;  // Questa "m" nella "MiaClasse_B_1" nasconde "m" nella classe "MiaClasse_A_1"

    public MiaClasse_B_1 (int a, int b) {     // Metodo costruttore di "MiaClasse_B_1"
        super.m = a;                   // "m" in "MiaClasse_A_1"
        m = b;                             // "m" in "MiaClasse_B_1"
    }

    public void show() {          // Metodo "show()"
        System.out.println(" m nella superclasse \"MiaClasse_A_1 \" vale: " + super.m);
        System.out.println(" m nella sottoclasse \"MiaClasse_B_1 \" vale: " + m);
    }
}

public class Usare_Super_1 {
    public static void main(String args[]) {
        MiaClasse_B_1 oggetto_1 = new MiaClasse_B_1(10, 20);
        
        oggetto_1.show(); 
    }
    
}

/* Questo con l'incapsulamento fatto da me non funziona,
  non riesco a compilare il metodo show().  */
  
  // Utilizzo di "super" per superare l'occultamento di nomi:
public class Mia_Classe_A {
    private int m;

    public void setM(int m) {
        this.m = m;
    }
    public int getM() {
        return m;
    }
}

// Crea una sottoclasse che estende "Mia_Classe_A"
public class Mia_Classe_B extends Mia_Classe_A {
    private int m;

    public void setM(int m) {
        this.m = m;
    }
    public int getM() {
        return m;
    }

    public Mia_Classe_B (int a, int b) {      // Metodo costruttore di "Mia_Classe_B"
        super.setM(m);
        m =b;
        this.setM(m);
        this.setM(m);

    }
    public void show() {          // Metodo "show()"
        System.out.println(" m nella superclasse \"MiaClasse_A_1 \" vale: " + super.setM(m));
        System.out.println(" m nella sottoclasse \"MiaClasse_B_1 \" vale: " + this.m);
    }
}

public class Usare_Super {
    public static void main(String args[]) {
        Mia_Classe_B ogg_B = new Mia_Classe_B ( 1, 2);

        ogg_B.show();

    }
}
// Grazie per la "dritta" marco mascardi

4 Risposte

  • Re: Un aiuto sull'incapsulamento

    Marco Mascardi ha scritto:


            System.out.println(" m nella superclasse \"MiaClasse_A_1 \" vale: " + super.setM(m));
    Hai usato setM che restituisce void e quindi NON può essere usato in una espressione (come quella della concatenazione delle stringhe).
    Questo non centra niente con l'incapsulamento.
  • Re: Un aiuto sull'incapsulamento

    Per prima cosa vorrei ringraziare "andbin" per il suo interessamento al mio quesito: grazie.
    Vorrei specificare,però, forse mi sarò spiegato male, che il mio problema non era sapere l'errore del metodo "show()" , gli avvisi di errore del
    compilatore mi dicevano appunto che "setM(m);" non può essere usato in una espressione di concatenazione delle stringhe.
    Io avrei voluto sapere come modificare il metodo "show()" da me scritto in modo errato in uno scritto in modo corretto che poteva
    compilare il mio programmino. Comunque ancora GRAZIE"
    Marco Mascardi.
  • Re: Un aiuto sull'incapsulamento

    Marco Mascardi ha scritto:


    Io avrei voluto sapere come modificare il metodo "show()" da me scritto in modo errato in uno scritto in modo corretto che poteva compilare il mio programmino.
    getM() invece che setM( ... )
  • Re: Un aiuto sull'incapsulamento

    Sempre per "andbin". Ancora grazie per i tuoi consigli, ho risolto il problema del metodo "show()" , sei stato molto gentile.
    Marco Mascardi
Devi accedere o registrarti per scrivere nel forum
4 risposte