[PL] Wstęp do programowania w Javie dla kompletnych laików #11 - poznanie pojęcia dziedziczenia klas

in polish •  7 years ago  (edited)

Cześć,

w tej części poradnika zajmiemy się pojęciem dziedziczenia(klas).

Jeżeli nie widziałeś poprzednich artykułów w tej serii, to zapraszam do zobaczenia poprzedniego artykułu:  https://steemit.com/polish/@grzegorz2047/pl-wstep-do-programowania-w-javie-dla-kompletnych-laikow-10-poznanie-pojecia-enkapsulacji-hermetyzacji-klas

Czym zatem jest to dziedziczenie?

Weźmy sobie przykład z życia:

  1. Twoi rodzice mają włosy koloru blond, jeden z nich ma oczy niebieskie a drugi zielone.
  2. Ty rodzisz się ich synem bądź córką
  3. Zauważasz, że masz włosy koloru blond oraz masz oczy zielone. Co to oznacz?
  4. Patrzysz na swoich rodziców i widzisz, że odziedziczyłaś od nich pewne cechy w genach

Na takiej samej zasadzie możemy porównać klasy w programowaniu.

  1. Nasza klasa posiada dwie zmienne typu string z widocznością protected, która pozwala odziedziczyć te dwie zmienne. Jest też jedno pole prywatne, które nie będzie odziedziczone. Jako, że pole jest prywatne, a my chcemy jednak jakoś udostępnić potomkowi treść, to będziemy mieli metodę z widocznością chronioną(protected). Pozwoli to na odziedziczenie potomkowi metodę.
  2. Tworzymy klasę i "mówimy" jej, że odziedziczyła pewne rzeczy z klasy "matka"
  3. My patrzymy, a tam mamy dostęp do dwóch zmiennych, które został odziedziczone. Mamy też metodę, która przekazuje nam treści z pola prywatnego

To jak to przedstawić w kodzie?

Ano tak:

public class BigMother {
   protected String eyeColor = "niebieski";
   protected String skinColor = "kremowa";
   private int intelligence = 100;
   
   protected int revealInteligence() {
       return intelligence;
   }

}

i tak:

public class LittleSon extends BigMother {

   public boolean haveFun() {
       System.
out.println("Oddziedziczony kolor oczu to " + this.eyeColor);
       System.
out.println("Oddziedziczony kolor skóry to " + this.skinColor);
       int inteligence = revealInteligence();
       System.
out.println("Odkryta inteligencja to " + inteligence);
       return true;
   }
}

Jak widać w powyższym kodzie, w klasie LittleSon mamy słowo kluczowe extends odpowiedzialne za dziedziczenie z klasy nadrzędnej. Wyrażenie LittleSon extends BigMother możemy przeczytać jako: "Klasa LittleSon dziedziczy wszystko z klasy BigMother, gdzie widoczność jest chroniona(protected)'

Zadajmy sobie teraz pytanie, kiedy to nam się przydaje?

Kiedy posiadamy podobne do siebie obiekty, czyli takie, gdzie należą one do jednej klasy obiektów.

Podam przykład, bo brzmi to niezbyt zrozumiale. Mamy pewien kształt i ten kształt może zostać odziedziczony przez koło, trójkąt prostokąt. No a czemu? bo koło, to pewien kształt. Każdy z tych obiektów posiada pewne pole, pewien obwód. Samo pojęcie kształt jest abstrakcyjne, co zaczyna podchodzić pod filozofię xd Ale my tu nie po filozofowanie, tylko nauczenie się programowania od zera. Jednakże, pojęcie "klasy abstrakcyjnej" zostanie jeszcze opisane. 

Dlaczego?

Ponieważ w Javie istnieje coś takiego jak klasa abstrakcyjna. To już będzie w innym wpisie :)

Jak zawsze, jak znajdziecie jakieś błędy, coś jest niejasne, to piszcie śmiało w komentarzach.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!