Eredità Java


Ereditarietà Java (sottoclasse e superclasse)

In Java è possibile ereditare attributi e metodi da una classe all'altra. Raggruppiamo il "concetto di eredità" in due categorie:

  • sottoclasse (figlio) - la classe che eredita da un'altra classe
  • superclass (genitore) - la classe da cui viene ereditata

Per ereditare da una classe, utilizzare la extends parola chiave.

Nell'esempio seguente, la Carclasse (sottoclasse) eredita gli attributi e i metodi dalla Vehicleclasse (superclasse):

Esempio

class Vehicle {
  protected String brand = "Ford";        // Vehicle attribute
  public void honk() {                    // Vehicle method
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
  private String modelName = "Mustang";    // Car attribute
  public static void main(String[] args) {

    // Create a myCar object
    Car myCar = new Car();

    // Call the honk() method (from the Vehicle class) on the myCar object
    myCar.honk();

    // Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
    System.out.println(myCar.brand + " " + myCar.modelName);
  }
}

Hai notato il protectedmodificatore in Veicolo?

Impostiamo l' attributo del marchio in Veicolo su un protected modificatore di accesso . Se fosse impostato su private, la classe Car non sarebbe in grado di accedervi.

Perché e quando usare "Ereditarietà"?

- È utile per il riutilizzo del codice: riutilizza attributi e metodi di una classe esistente quando crei una nuova classe.

Suggerimento: dai un'occhiata anche al capitolo successivo, Polimorfismo , che utilizza metodi ereditati per eseguire diversi compiti.


La parola chiave finale

Se non vuoi che altre classi ereditino da una classe, usa la finalparola chiave:

Se provi ad accedere a una finalclasse, Java genererà un errore:

final class Vehicle {
  ...
}

class Car extends Vehicle {
  ...
}

L'output sarà qualcosa del genere:

Main.java:9: error: cannot inherit from final Vehicle
class Main extends Vehicle {
                  ^
1 error)