hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 21:19



Jelenlévő felhasználók

Jelenleg 209 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 208 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 
Szerző Üzenet
HozzászólásElküldve: 2018.03.10. 12:15 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Sziasztok!

Az objektum orientált programozás egyik legalapvetőbb pillére az inheritence, az öröklődés. Az osztályoknak lehetnek child osztályai, azoknak még child osztályai és így tovább. Fontos hozzátenni, hogy ebben a leckében egyelőre csak is a nem absztrakt osztályokról lesz szó.

Kezdjünk egy teljesen új példát, hagyjuk egyelőre a kutya osztályt. Hozzunk létre a Main classon kívül egy Person fájlt (benne Person osztály), amiben adjunk meg alapvető fieldeket (name, age) és alapvető metódusokat (eat, sleep, getterek, setterek, konstruktorok).

  1. public class Person {
  2.     private String name;
  3.     private int age;
  4.    
  5.     public Person() {
  6.     }
  7.  
  8.     public Person(final String name, final int age) {
  9.         this.name = name;
  10.         this.age = age;
  11.     }
  12.  
  13.     public void eat() {
  14.         System.out.println("Person " + name + " is eating.");
  15.     }
  16.  
  17.     public void sleep() {
  18.         System.out.println("Person " + name + " is sleeping now.");
  19.     }
  20.  
  21.     public String getName() {
  22.         return name;
  23.     }
  24.  
  25.     public void setName(String name) {
  26.         this.name = name;
  27.     }
  28.  
  29.     public int getAge() {
  30.         return age;
  31.     }
  32.  
  33.     public void setAge(int age) {
  34.         this.age = age;
  35.     }
  36. }


Ezt ha leteszteljük, működik. Most hozzunk létre egy Woman osztályt is, amely származzon a Person osztályból. Származtatni az 'extends' kulcsszóval tudunk. Syntax: class ChildClass extends ParentClass { }

A Woman osztály egyelőre üresen.

  1. public class Woman extends Person {
  2.  
  3. }


Példányosítsunk a Main osztályban egy Woman típuső objektumot, próbáljuk meg besettelni a nevét, majd hívjuk meg az eat() metódusát.

  1. public class Main {
  2.  
  3.     public static void main(String[] args) {
  4.  
  5.         Woman woman = new Woman();
  6.         woman.setName("Katherine");
  7.         woman.eat();
  8.  
  9.     }
  10. }


Alapesetben, ha a Woman nem származna a Personből, nem tudnánk ezt megtenni, mivel a Woman nem rendelkezik semmivel sem. De mivel származtattuk a Personből, ezért minden fieldjét és metódusát megörökölte. Ezért lesz most az eredmény: "Person Katherine is eating".

Lehetőségünk van azonban felülírni a megörökölt metódusokat. Furcsán néz ki Katherine előtt a Person, az legyen inkább Woman, valamint a nők többnyire szeretik a salátát, ezért a Woman osztályunk salátát egyen.

Ezt ugyanúgy, mint amikor a toString()-et felülírtuk, most is az @Override annotációval és a függvény újra leimplementálásával lehet megtenni.

  1. public class Woman extends Person {
  2.  
  3.     @Override
  4.     public void eat() {
  5.         System.out.println("Woman " + getName() + " is eating salad now.");
  6.     }
  7. }


Hangsúlyozom, hogy a @Override nem kötelező, amikor overrideolunk metódusokat. Ezt főképp azért használjuk, mert először is jelzi, ha a függvényünk nem is ír semmit felül, mert pl. elgépeltük, valamint így átláthatóbbá teszi egy másik fejlesztőnek a kódodat, mert tudni fogja, hogy ez a függvény már létezik feljebbi rétegben is.

Feltűnhet, hogy itt nem name fieldre hivatkoztam, hanem a getName() gettert hívtam meg. Ez azért van, mert amit már tanultunk itt is előjön. A private modifierrel ellátott elemek még a childclassban SEM elérhetőek. Ezzel ellentétben a publikus getName() bárhonnan elérhető.

A javaban minden osztály az Object classból származik, ezért rendelkezik minden saját osztályunk az Object függvényeivel, amiket overrideolni is tudunk ha szükséges (pl equals, hashcode, toString etc).

Ez volt az inheritence in a nutshell.


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2018.03.10. 16:36 
Offline
Felfüggesztve
Avatar

Csatlakozott: 2013.06.09. 18:47
Hozzászólások: 2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
Szép a leírás, számomra érthető is, de egy olyan embernek már nem lesz az, aki most tanulja. :D

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2018.03.10. 16:50 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Anonymous1337 írta:
Szép a leírás, számomra érthető is, de egy olyan embernek már nem lesz az, aki most tanulja. :D


Ezért vannak korábbi topikok is.


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole