Classi, ereditarietà, scooping

di il
4 risposte

Classi, ereditarietà, scooping

Salve! Rieccomi qui con un'altra domanda su java. Come ho già detto nella precedente discussione che ho aperto, vi prego di scusarmi se faccio domande la cui risposta è ovvia, ma sono alle prime armi con java e arrugginita per quanto riguarda la programmazione, che non prendo più in mano da anni.
Dunque, il mio problema è il seguente:
Ho una classe Quadrilateri:

public class Quadrilateri {
	// lati del quadrilatero
	private double l1,l2,l3,l4;
	
	public Quadrilateri() {
	...	
	}
	
	public  Quadrilateri(double a,double b,double c,double d,){
		...

	}
	public double perimetro() {
		
		
		return this.l1+this.l2+this.l3+this.l4;
	}	
	
e una sua sottoclasse Rettangoli:

public class Rettangolo extends Quadrilateri {

	public Rettangolo (double a,double b) {
		...
		
	}
	public double area(){
		return this.l1*this.l2;
	}
	
	}
	
Ecco: il riferimento a l1 e l2 in Rettangoli (this.l1 e this.l2) mi dà errore in compilazione, se l1 e l2 sono dichiarati, in quadrilateri, private (cosa che mi sembra corretta perché vorrei nascondere all'esterno della classe quadrilateri la struttura interna della classe stessa).
Pensavo però che la classe Rettangoli, che è 'figlia' di Quadrilateri, ereditasse dalla 'mamma' metodi e variabili, anche se private. Non è così?
Come si fa allora a rendere nascosti all'esterno i dettagli implementativi di una classe ma a renderli utilizzabili dalle classi figlie? Mi devo costruire dei metodi pubblici: getl1, getl2... per leggere i contenuti di tali variabili?
O c'è un altro modo?
Grazie!

4 Risposte

  • Re: Classi, ereditarietà, scooping

    Uhm, no. Le variabili private vengono nascoste anche alle classi "figlie". Potresti dichiararle protected, ma è una mezza soluzione: saranno visibili a tutte le classi nello stesso package. Dai, i metodi pubblici non sono poi tanto brutti
  • Re: Classi, ereditarietà, scooping

    Ti ringrazio. Avevo provato con protected, ma, come dici tu sarebbero visibili in tutto il package, non solo nelle classi figlie. Non sono i metodi che non mi piacciono pubblici (anzi, alcuni lo devono per forza essere, altrimenti che senso ha di esistere la classe?) ma le variabili che implementano il tipo di dato. Queste mi pare che debbano essere private, in modo da nascondere l'implementazione della classe all'esterno di essa.
    Quando ho studiato io, questo era un concetto fondamentale: nascondere i dettagli implementativi di un livello (classe, tipo di dato, livello di S.O.....) ai livelli superiori. Questo perché svincola il programmatore dei livelli superiori dalla conoscenza di come sono rappresentati i dati a livello sottostante, permette una maggior portabilità e modificabilità del sw...
    Però, come dicevo sopra, ho studiato molto, molto tempo fa. Temo che certi concetti di allora siano superati.
    Ho (per ora) risolto il mio problema costruendo metodi pubblici per la lettura dei dati che interessano all'esterno, nell'attesa di sapere se ci sono altri modi.
  • Re: Classi, ereditarietà, scooping

    Uhm, no, sono le stesse cose che sto studiando anche io. Credo sia la soluzione migliore.
  • Re: Classi, ereditarietà, scooping

    Meno male.... dopo tutto questo tempo, a volte penso che quello che ho studiato è ormai obsoleto (e a volte, mi sono resa conto, è proprio così )!
    Ti ringrazio!

    Ora ho altre domande su differenti argomenti; vado perciò ad aprire un'altra discussione (anzi, prima cerco trovo la risposta in discussioni vecchie)
    Grazie di nuovo!
Devi accedere o registrarti per scrivere nel forum
4 risposte