Dziedziczenie tylko niektórych pól

0

Czy w javie jest możliwe, żeby klasa dziedziczyła tylko niektóre pola/metody?
Głównie chodzi mi, żeby podczas tworzenia konstruktora klasy dziedziczącej, nie musieć podawać wszystkich pól super klasy.
edit: Drugie pytanie. Nie można stworzyć tablicy z obiektami które dziedziczą z metody abstrakcyjnej?

1

Ad 1. Zmień konstruktor klasy bazowej i już.
Ad 2. Tablice stworzyć można, natomiast abstrakcyjnego obiekty nie możesz stworzyć i do tej tablicy wstawić.

1

Jak klasy dziedziczące zaczynają się na tyle różnić, że potrzebujesz dziedziczyć tylko niektóre zachowania, mieć rożne konstruktory itd. to zazwyczaj jest to smrodek, który można obejść używając kompozycji. Pamiętaj Prefer composition over inheritance Btw. nie wiem czy wiesz, ale w Javie możesz mieć kilka konstrutkorów z różnymi parametrami.

1
  1. nie da sie, dziedziczy sie wszystko (ew. mozesz do czegos nie miec dostepu bo jest prywatne). jesli ci to przeszkadza to znaczy ze na 99% dziedziczenie nie jest dobrym rozwiazaniem w tym przypadku
  2. da sie, zakladam ze chodzi ci np. o stworzenie tablicy AbstractType[] items i wrzucanie do niej elementow typow ConcreteType dziedziczacych z AbstractType
1

Taka sytuacja NIGDY nie ma sensu. Bo automatycznie łamie zasadę https://en.wikipedia.org/wiki/Liskov_substitution_principle bo jeśli klasa bazowa nie będzie poprawnie zainicjalizowana to nie będzie można użyć klasy pochodnej jako bazowej.

  1. Wydziel nadklasę z prawdziwymi elementami wspólnymi
    lub
  2. Zrób delegacje dla fragmentu tej twojej niedoszłej klasy bazowej
    lub
  3. Wydziel operacje które są ci potrzebne do osobnego bezstanowego serwisu z którego obie klasy korzystają

Wszystko zależy od tego jaką masz konkretnie sytuację.

0
Shalom napisał(a):

Taka sytuacja NIGDY nie ma sensu
nigdy nie mow nigdy, mysle ze czasem warto stosowac zdrowy rozsadek niz wywracac do gory nogami system tylko po to zeby bylo wg zasad SOLID. lamanie samego liskova jest imo ok jesli chodzi o np unit testy

1 użytkowników online, w tym zalogowanych: 0, gości: 1