Dajmy na to, mam klasę abstrakcyjną typu wielokąt:
abstract class wielokąt{ private int liczbaKątów; public int getLiczbaKątów() {return liczbaKątów; } public int setLiczbaKątów(int lk) { liczbaKątów = lk; } }
Następnie robię sobie klasę trójkąt:
class trójkąt extend wielokąt{ trójkąt()//w php będzie to __construct() { setLiczbaKątów(3); } }
W analogiczny sposób robię sobie klasy czworokąt, pięciokąt itd.
Następnie w kodzie mam wiele instancji tych klas (trójkątów, czworokątów itd.)
Okazuje się, że mój kod jest nieco pamięciożerny, bo liczba kątów dla klasy trójkąt zawsze będzie równa 3, a ja tworzę dla każdej instancji klasy osobną zmienną.
Niby z pomocą przychodzą zmienne statyczne, ale jeśli takową zadeklaruję w klasie wielokąt, to liczba kątów dla trójkąta i czworokąta będzie taka sama.
Muszę więc zadeklarować tą zmienną statyczna w klasach potomnych, czyli w trójkącie, czworokącie,...,n-kącie. Ale wtedy moje metody zdefiniowane w klasie wielokąt nie będą działały, bo przecież w klasie wielokąt nie ma zmiennej o nazwie liczbaKątów.
Ratunkiem jest stworzenie tych metod w klasach potomnych, a w klasie nadrzędnej zostawić tylko "abstrakcyjne nagłówki".
Jednak... nie bardzo mi to pasuje, bo każda z tych metod (setter i getter) bedzie wyglądał tak samo. Nie chcę więc powielać kodu.
jak temu zaradzić ?