Eredità è un concetto centrale nella programmazione orientata agli oggetti (OOP) ed è spesso considerato uno dei pilastri per migliorare l'efficienza. In questo tutorial approfondirai la tua comprensione dell'eredità in Java. Imparerai come gestire i modificatori di accesso, utilizzare i costruttori e quale ruolo gioca l'incapsulamento nell'eredità.
Principali scoperte
- L'eredità consente di ereditare proprietà e metodi da una classe.
- Il modificatore di accesso private limita l'accesso alle variabili o ai metodi, mentre protected consente un accesso più ampio all'interno delle classi che ereditano dalla classe originale.
- I costruttori devono essere chiamati nella sottoclasse per istanziare correttamente gli oggetti.
- Le interfacce dei metodi possono essere utilizzate in modo generalizzato quando si hanno più classi specifiche.
Guida passo passo
Modificatori di accesso: protected vs. private
Se dichiari una variabile (ad es. colore) come protected in una classe come Veicolo, puoi utilizzare questa variabile direttamente in una classe derivata (ad es. Auto). Tuttavia, se dichiari la variabile come private, non potrai accedervi direttamente nella sottoclasse.

Questo significa concretamente che l'accesso alle variabili private è possibile solo tramite metodi Setter e Getter.
L'esempio mostra che dobbiamo utilizzare setColore e getColore per accedere alla variabile privata colore.

Quando la variabile è dichiarata come protected, puoi semplicemente accedervi all'interno della classe Auto e cambiarne il valore.
Utilizzo dei costruttori nell'eredità
Nella definizione di una sottoclasse, devi assicurarti che il costruttore della superclasse venga chiamato correttamente.

Questo garantisce che il colore venga inizializzato correttamente quando si crea un oggetto Auto.

Fai attenzione a definire un costruttore nella sottoclasse che passi adeguatamente i parametri della superclasse.
Ereditarietà e chiamate ai metodi
Due classi, Veicolo e Auto, ti consentono di utilizzare variabili e metodi comuni. Se definisci un metodo in Veicolo, puoi utilizzare questo metodo anche in Auto senza doverlo riscrivere.

Qui viene chiamato il metodo veicoloColoreUscire e restituisce il valore del colore fornito dal metodo getColore.
Limitazioni dell'accesso ai metodi
Se tenti di chiamare un metodo in una sottoclasse che non è disponibile per la classe, riceverai un errore di compilazione. Nel nostro esempio, deve essere passato un oggetto Veicolo per chiamare il metodo getColore.

Questo significa praticamente che devi assicurarti che il metodo sia adatto al tuo tipo di dato prima di chiamarlo. Puoi quindi passare una bicicletta, un'auto o entrambi a un metodo che si aspetta semplicemente oggetti Veicolo.
Esempio di chiamata a metodi di istanza in contesti statici
Nota che nei metodi statici (static) la parola chiave this non può essere utilizzata, poiché non si riferisce a un'istanza specifica. In tali casi, potresti voler utilizzare un altro metodo o ristrutturare la logica.

Con questa chiamata, il colore per l'oggetto mioAuto viene correttamente visualizzato.
Riepilogo - Eredità in Java: Una guida per principianti
L'eredità è un concetto importante nella programmazione con Java, che ti aiuta a modularizzare e riutilizzare il codice. In questo tutorial hai appreso le nozioni di base sui modificatori di accesso, i costruttori e le chiamate ai metodi in relazione all'eredità.
Domande frequenti
Come posso accedere a variabili private nella sottoclasse?Non è possibile accedere direttamente a variabili private nella sottoclasse. Utilizza metodi Getter e Setter.
Qual è la differenza tra protected e private?protected consente l'accesso nella sottoclasse e nello stesso pacchetto, mentre private è accessibile solo all'interno della propria classe.
Devo definire i costruttori nella sottoclasse?Sì, se hai modificato il costruttore della superclasse, devi definire i costruttori nella sottoclasse di conseguenza.
Posso sovrascrivere liberamente i metodi delle superclassi nelle sottoclassi?Sì, puoi sovrascrivere metodi che non sono contrassegnati con final o static nella sottoclasse per implementare un comportamento specifico.