Weboldalunk cookie-kat használhat, hogy megjegyezze a belépési adatokat, egyedi beállításokat, továbbá statisztikai célokra és hogy a személyes érdeklődéshez igazítsa hirdetéseit. További információ

Főoldal Belépés/Regisztráció Egy véletlen kérdés Facebook






Kategória: Számítástechnika » Programozás

A kérdés

JAVA: öröklődés probléma?

Üdv!


Minden létező dokumentációban az van leírva, hogy egy osztály nem örökli a szülő osztály konstruktorát, csak annak metódusait, stb.

Ennek ellenére, amikor extendelni akarok egy osztályt a szülőre, hibát jelez, és a szülő konstruktorát kéri. Magyarosabban:

Adott A osztály melyhez a következő konstruktor társul: A(int valami)

Ezután létrehozok egy B osztályt, melyet nem tudok örököltetni, hacsak létre nem hozok B-hez egy ugyanolyan mintájú konstruktort(B(int valami). Csakhogy nyilván nem ugyanolyan adatokat, metódusokat akarok B osztályba tenni, annak ellenére, hogy A leszármazottja.

Mi itt a probléma?



Keress kérdéseket hasonló témákban: Java, öröklődés

  máj. 5. 21:47  Privát üzenet  

A válaszok
Mivel a leszármazott osztályból példányosított objektum a szülő típusú változójába is betehető, muszáj ugyan azoknak a konstruktoroknak meglennie. Ha nem akarsz újat írni, egy super(valami) hívással a leszármazottban a szülő konstruktorát fogod meghívni, így neked nem kell újat írni.

A válaszíró 77%-ban hasznos válaszokat ad.
# 1/4Időpont máj. 5. 22:02 Privát üzenet
Hasznos számodra ez a válasz?

Nincs itt semmiféle probléma, csak nem olvastad el rendesen és nem értelmezed azt a nyamvadt hibaüzenetet, ráadásul még ide sem sikerült bemásolnod se a kódot, se a hibaüzenetet. Fail.


A probléma pedig a következő:

Ha egy leszármazott osztályt példányosítasz, akkor mielőtt lefutna a leszármazott osztály konstruktora, le fog futni az ős osztály konstruktora is.

Ha nem adtad meg explicit másképp, akkor ez mindig a default konstruktort jelenti. A probléma ott van nálad, hogy az ősosztályodnak nincs default konstruktora, így a fordító nem tudja mit hívjon.

Te ezt tévesen úgy értelmezted, hogy a leszármazott osztálynak kell plusz konstruktort írnod, valójában pedig csak meg kéne mondani, hogy az ősosztály melyik konstruktora milyen paraméterekkel hívódjon meg.

Tipikus megoldása ennek az "A() : B(0)" forma. (0 helyén állhatna bármilyen más szám, amit az üzleti logika megkövetel.)


Írtál egy gyanús mondatot: "Csakhogy nyilván nem ugyanolyan adatokat, metódusokat akarok B osztályba tenni, annak ellenére, hogy A leszármazottja."

Ez meg arra enged következtetni, hogy itt tervezési hiba is van. Ha nem tudod úgy példányosítani a leszármazott osztályt, hogy az ősosztályt megfelelően inicializálni tudd, akkor a leszármazás nem alkalmazható és Te valójában valami mást szerettél volna megvalósítani.



A válaszíró 57%-ban hasznos válaszokat ad.
# 2/4Időpont máj. 5. 22:08 Privát üzenet
Hasznos számodra ez a válasz?

"Mivel a leszármazott osztályból példányosított objektum a szülő típusú változójába is betehető, muszáj ugyan azoknak a konstruktoroknak meglennie"

Ez szimplán nem igaz, lásd a példa amit írtam.



A válaszíró 57%-ban hasznos válaszokat ad.
# 3/4Időpont máj. 5. 22:14 Privát üzenet
Hasznos számodra ez a válasz?

Liskov-féle hellyettesítési elvet akarod megsérteni:

Minden metódust amit implementál egy ősosztály, meg kell valósítania a leszármazottnak is. A legtöbb függvény esetén simán a java megoldja, hogy az ősosztályét hívja akkor, de konstruktort nem tud úgy készíteni, mert akkor a leszármazottként nem tudnád példányosítani.



A válaszíró 77%-ban hasznos válaszokat ad.
# 4/4Időpont máj. 5. 22:22 Privát üzenet
Hasznos számodra ez a válasz?

Értesítsünk róla, ha új válasz érkezik? Válasz küldése



Kapcsolódó kérdések
Ha kvízprogramot írok, lehet probléma a plagizálással, "szerzői jogokkal"?
Egy osztály példányait elérhetem egy másik osztályból? (java)
Pythonban debugoláskor a program miért ad hozzá a kódhoz egy üres sort?
C# bejelentkezeés probléma. Hogyan valósítható meg?
Ebben a programban mi lehet a baj? (python) (egyszerűen hiába nézem nem jövök rá a problémára, (most kezdtem) ) rossz kifogás de ez van.
Tic Tac Toe készítés Python 3-ban?

Kérdések a Számítástechnika rovatbólKérdések a Programozás rovatból








Minden jog fenntartva © 2019, www.gyakorikerdesek.hu | GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | WebMinute Kft. | Kapcsolat: info (kukac) gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!