Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Principi OOP: Ereditarietà | Oop
Java OOP
course content

Contenuti del Corso

Java OOP

Java OOP

1. Come Lavorare con l'IDE?
2. Oop
3. Interfaccia

book
Principi OOP: Ereditarietà

Ereditarietà

Analizziamo il principio della OOP - Ereditarietà.

L'ereditarietà è un meccanismo che consente la creazione di classi basate su un'altra classe.

  • La classe che funge da base è chiamata classe genitore o superclasse;

  • La classe creata sulla base della classe genitore è chiamata classe figlia, sottoclasse o discendente.

In questo modo, la classe figlia può ereditare le caratteristiche e proprietà di un'altra classe - la classe genitore (i suoi metodi e variabili).

È possibile ereditare una classe utilizzando la parola chiave extends. La sintassi per una classe figlia che eredita da una classe genitore è la seguente:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

Vediamo un esempio di come funziona l'ereditarietà nel codice. Abbiamo una classe Bird con determinati campi e metodi, e una classe Parrot con i propri campi e metodi. Un pappagallo è un uccello, quindi logicamente il pappagallo dovrebbe ereditare dalla classe Bird:

Ecco il codice dallo screenshot, riscritto per una migliore leggibilità e chiarezza:

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

Analizziamo cosa sta succedendo in queste immagini:

  1. Creiamo una classe Bird, che in questo caso è la classe genitore. Questa classe possiede i propri campi e metodi;

  2. Creiamo una classe Parrot, che utilizza la parola chiave extends per ereditare dalla classe genitoreBird. La classe Parrot è una classe figlia e possiede campi e metodi propri. Inoltre, come classe figlia, Parroteredita tutti i campi e i metodi della classe genitore Bird;

  3. Creiamo un oggetto della classe Parrot nel metodo main e vediamo che possiamo inizializzare i campi di entrambe le classi, sia genitore che figlia. Prima inizializziamo i campi della classe genitore Bird, poi quelli della classe figlia Parrot. Successivamente, chiamiamo i metodi: prima quelli della classe genitore, poi il metodo della classe figlia.

In questo modo, abbiamo utilizzato l'ereditarietà per ereditare la classe Bird.

Perché lo facciamo?

Quando abbiamo molte sottoclassi di Bird, non solo Parrot, ma ad esempio anche Pigeon e Penguin, avremo molti campi duplicati, come boolean canFly. La prima cosa che l'ereditarietà aiuta a fare è evitare frammenti di codice duplicati. Inoltre, migliora notevolmente la leggibilità. In pratica, raramente si incontrano direttamente la classe Bird e le sue sottoclassi, ma l'ereditarietà è comunemente utilizzata, soprattutto con le interfacce.

Nota

Imparerai le interfacce nella prossima sezione di questo corso.

Regole dell'ereditarietà

  • Ereditare una sola classe. Java non supporta l'ereditarietà multipla. Una classe può avere solo un genitore;

  • Tutto viene ereditato tranne le variabili e i metodi private.

Nota

Non puoi ereditare da te stesso!

In precedenza, ho menzionato che una sottoclasse avrebbe accesso a tutte le variabili e i metodi della classe genitore. Tuttavia, questo non è del tutto vero.

In realtà, tutti i metodi e le variabili contrassegnati con il modificatore private non sono accessibili alla sottoclasse.

  • Sovrascrivere il metodo della classe genitore.

Immaginiamo di ereditare una classe, ma ci sono alcune parti del codice ereditato che non ci piacciono. Supponiamo di voler far funzionare un metodo specifico in modo diverso rispetto alla classe genitore.

Per sovrascrivere un metodo della classe genitore, scriviamo @Override sopra di esso:

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

Nel codice sopra, abbiamo sovrascritto il metodo della classe genitore, e ora quando questo metodo viene chiamato dalla classe figlia, verrà invocato il metodo sovrascritto!

  • Prevenzione dell'ereditarietà.

Se non si desidera che la propria classe venga ereditata, utilizzare il modificatore final prima di essa. Ad esempio:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

In questo modo, utilizzando la parola chiave final, abbiamo vietato l'ereditarietà della classe Bird.

Queste sono solo le regole fondamentali e le caratteristiche dell'ereditarietà. Si tratta di un argomento molto ampio, che utilizzerai molto frequentemente. Nel corso delle lezioni, acquisirai familiarità con altri aspetti dell'ereditarietà e li utilizzerai più spesso.

1. Perché abbiamo bisogno dell'ereditarietà in Java?

2. Da quante classi possiamo ereditare contemporaneamente?

3. Come possiamo impedire l'ereditarietà in Java?

question mark

Perché abbiamo bisogno dell'ereditarietà in Java?

Select the correct answer

question mark

Da quante classi possiamo ereditare contemporaneamente?

Select the correct answer

question mark

Come possiamo impedire l'ereditarietà in Java?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

course content

Contenuti del Corso

Java OOP

Java OOP

1. Come Lavorare con l'IDE?
2. Oop
3. Interfaccia

book
Principi OOP: Ereditarietà

Ereditarietà

Analizziamo il principio della OOP - Ereditarietà.

L'ereditarietà è un meccanismo che consente la creazione di classi basate su un'altra classe.

  • La classe che funge da base è chiamata classe genitore o superclasse;

  • La classe creata sulla base della classe genitore è chiamata classe figlia, sottoclasse o discendente.

In questo modo, la classe figlia può ereditare le caratteristiche e proprietà di un'altra classe - la classe genitore (i suoi metodi e variabili).

È possibile ereditare una classe utilizzando la parola chiave extends. La sintassi per una classe figlia che eredita da una classe genitore è la seguente:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

Vediamo un esempio di come funziona l'ereditarietà nel codice. Abbiamo una classe Bird con determinati campi e metodi, e una classe Parrot con i propri campi e metodi. Un pappagallo è un uccello, quindi logicamente il pappagallo dovrebbe ereditare dalla classe Bird:

Ecco il codice dallo screenshot, riscritto per una migliore leggibilità e chiarezza:

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

Analizziamo cosa sta succedendo in queste immagini:

  1. Creiamo una classe Bird, che in questo caso è la classe genitore. Questa classe possiede i propri campi e metodi;

  2. Creiamo una classe Parrot, che utilizza la parola chiave extends per ereditare dalla classe genitoreBird. La classe Parrot è una classe figlia e possiede campi e metodi propri. Inoltre, come classe figlia, Parroteredita tutti i campi e i metodi della classe genitore Bird;

  3. Creiamo un oggetto della classe Parrot nel metodo main e vediamo che possiamo inizializzare i campi di entrambe le classi, sia genitore che figlia. Prima inizializziamo i campi della classe genitore Bird, poi quelli della classe figlia Parrot. Successivamente, chiamiamo i metodi: prima quelli della classe genitore, poi il metodo della classe figlia.

In questo modo, abbiamo utilizzato l'ereditarietà per ereditare la classe Bird.

Perché lo facciamo?

Quando abbiamo molte sottoclassi di Bird, non solo Parrot, ma ad esempio anche Pigeon e Penguin, avremo molti campi duplicati, come boolean canFly. La prima cosa che l'ereditarietà aiuta a fare è evitare frammenti di codice duplicati. Inoltre, migliora notevolmente la leggibilità. In pratica, raramente si incontrano direttamente la classe Bird e le sue sottoclassi, ma l'ereditarietà è comunemente utilizzata, soprattutto con le interfacce.

Nota

Imparerai le interfacce nella prossima sezione di questo corso.

Regole dell'ereditarietà

  • Ereditare una sola classe. Java non supporta l'ereditarietà multipla. Una classe può avere solo un genitore;

  • Tutto viene ereditato tranne le variabili e i metodi private.

Nota

Non puoi ereditare da te stesso!

In precedenza, ho menzionato che una sottoclasse avrebbe accesso a tutte le variabili e i metodi della classe genitore. Tuttavia, questo non è del tutto vero.

In realtà, tutti i metodi e le variabili contrassegnati con il modificatore private non sono accessibili alla sottoclasse.

  • Sovrascrivere il metodo della classe genitore.

Immaginiamo di ereditare una classe, ma ci sono alcune parti del codice ereditato che non ci piacciono. Supponiamo di voler far funzionare un metodo specifico in modo diverso rispetto alla classe genitore.

Per sovrascrivere un metodo della classe genitore, scriviamo @Override sopra di esso:

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

Nel codice sopra, abbiamo sovrascritto il metodo della classe genitore, e ora quando questo metodo viene chiamato dalla classe figlia, verrà invocato il metodo sovrascritto!

  • Prevenzione dell'ereditarietà.

Se non si desidera che la propria classe venga ereditata, utilizzare il modificatore final prima di essa. Ad esempio:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

In questo modo, utilizzando la parola chiave final, abbiamo vietato l'ereditarietà della classe Bird.

Queste sono solo le regole fondamentali e le caratteristiche dell'ereditarietà. Si tratta di un argomento molto ampio, che utilizzerai molto frequentemente. Nel corso delle lezioni, acquisirai familiarità con altri aspetti dell'ereditarietà e li utilizzerai più spesso.

1. Perché abbiamo bisogno dell'ereditarietà in Java?

2. Da quante classi possiamo ereditare contemporaneamente?

3. Come possiamo impedire l'ereditarietà in Java?

question mark

Perché abbiamo bisogno dell'ereditarietà in Java?

Select the correct answer

question mark

Da quante classi possiamo ereditare contemporaneamente?

Select the correct answer

question mark

Come possiamo impedire l'ereditarietà in Java?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2
some-alt