Jak ominąć brak abstrakcyjnych pól w Javie?

Załóżmy, że mamy klasę abstrakcyjnąA i chcemy zmusić wszystkie podklasy do posiadania pewnego pola. Nie jest to możliwe w Javie, ponieważ nie możemy zdefiniować pól abstrakcyjnych.

Obejście 1: Wymuś podklasy, aby wdrożyły metodę zapewniającą pożądaną wartość.

abstract class A {
  abstract int getA();
}

Wada: Każda podklasa musi implementować metodę dla każdego pola abstrakcyjnego, które chcemy mieć. Może to prowadzić do wielu implementacji metod.

Korzyść: Możemy użyć tej metodygetA w klasie abstrakcyjnej i zaimplementuj z nią metodyA bez implementowania ich w każdej podklasie. Jednak wartość metody nie może zostać nadpisana przez klasę abstrakcyjną.

Obejście 2: Symuluj pole abstrakcyjne, zmuszając podklasę do nadania klasie abstrakcyjnej wartości.

abstract class A {
  int a;

  public A(int a) {
    this.a = a;
  }
}

Wada: Gdy mamy wiele pól (> 10), wywołanie super konstruktora będzie wyglądało trochę brzydko i myląco.

Korzyść: Możemy użyć polaa w klasie abstrakcyjnej i zaimplementuj z nią metodyA bez implementowania ich w każdej podklasie. Plus, wartośća można nadpisać klasą abstrakcyjną.

Pytanie: Jakie obejście jest powszechnym sposobem osiągnięcia celu? Może jest coś lepszego niż powyższe?

questionAnswers(5)

yourAnswerToTheQuestion