Java -erfenis


Java-overerving (subklasse en superklasse)

In Java is het mogelijk om attributen en methoden van de ene klasse naar de andere te erven. We groeperen het "erfenisconcept" in twee categorieën:

  • subklasse (kind) - de klasse die erft van een andere klasse
  • superklasse (ouder) - de klasse waarvan wordt geërfd

Gebruik het extends trefwoord om van een klasse te erven.

In het onderstaande voorbeeld neemt de Carklasse (subklasse) de attributen en methoden over van de Vehicleklasse (superklasse):

Voorbeeld

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);
  }
}

Heb je de protectedmodifier in Vehicle opgemerkt?

We stellen het merkkenmerk in Voertuig in op een protected toegangsmodifier . Als deze was ingesteld op private, zou de autoklasse er geen toegang toe hebben.

Waarom en wanneer "Overerving" gebruiken?

- Het is handig voor herbruikbaarheid van code: hergebruik attributen en methoden van een bestaande klasse wanneer u een nieuwe klasse aanmaakt.

Tip: kijk ook eens naar het volgende hoofdstuk, Polymorfisme , dat overgeërfde methoden gebruikt om verschillende taken uit te voeren.


Het laatste trefwoord

Als je niet wilt dat andere klassen van een klasse erven, gebruik dan het finaltrefwoord:

Als u toegang probeert te krijgen tot een finalklasse, genereert Java een fout:

final class Vehicle {
  ...
}

class Car extends Vehicle {
  ...
}

De uitvoer zal ongeveer als volgt zijn:

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