Konstrukcja super w konstruktorach i metodach

Konstruktor

Jak wiadomo konstruktory w javie nie są dziedziczone. Istnieje jednak sposób na wywołanie konstruktora klasy dziedziczonej w klasie dziedziczącej. Służy do tego konstrukcja super().
Jeżeli w klasie bazowej zdefiniujemy własny konstruktor (domyślny nie zostanie wtedy utworzony przez kompilator) to w klasie która dziedziczy naszą klasę bazową, a dokładnie w jej konstruktorze, a jeszcze dokładniej w jego pierwszej instrukcji, musimy wywołać wspomnianą konstrukcję tak jak poniżej w przykładzie.

Klasa dziedziczona Vehicle


public class Vehicle {
     private int enginePower;
     private int fuel;

     public int getEnginePower() {
          return enginePower;
     }

     public int setEnginePower(int enginePower) {
          this.enginePower = enginePower;
     }

     public int getFuel() {
          return fuel;
     }

     public int setFuel(int fuel) {
          this.fuel = fuel;
     }


     public Vehicle (int enginePower, int fuel) {
          setEnginePower(enginePower);
          setFuel(fuel);
     }

}

Klasa Car dziedzicząca po Vehicle


public class Car extends Vehicle {

     private int wheels;

     public int getWheels() {
          return wheels;
     }

     public int setWheels(int wheels) {
          this.wheels = wheels;
     }

     public Car (int enginePower, int fuel, int wheels) {
          super(enginePower, fuel);
          setWheels(wheels);
     }
}

Metoda

Wykorzystanie konstrukcji super w metodach (które w odróżnieniu od konstruktorów są dziedziczone) umożliwia nam odwoływanie się do pól i metod nadklasy które zostały przesłonięte.

Jeśli teraz w klasie Vehicle dodamy metodę tankującą 10 litrów paliwa:

Klasa Vehicle

private void fuel10L {
     setFuel(getFuel + 10);
     }

A nasz samochód ma silnik dwusuwowy do którego poza paliwem trzeba dolać olej możemy postąpić w następujący sposób:

Dodajemy metodę dolewającą dedykowany olej dla dwusuwów do paliwa w klasie Car

public void addOilToFuel() {
     //implementacja metody dolewającej olej
}

Dodajemy metodę tankującą paliwo + dolewającą olej

public void fuel10L() {
     super.fuel10L();
     addOilToFuel();
}

W odróżnieniu od konstruktorów, w przypadku metod używa się formy zapisu z kropką zamiast argumentu w nawiasie.

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *