Kezdőoldal » Számítástechnika » Programozás » Ha absztrakt osztály nem...

Ha absztrakt osztály nem példányosítható, akkor ez hogyan lehetséges?

Figyelt kérdés

Ha absztrakt osztály nem példányosítható, akkor ez hogyan lehetséges?


Az URLConnection osztály absztrakt, és még a konstruktora is protected:

[link]


Az URL osztály openConnection metódusa mégis egy URLConnection osztályt ad vissza:

[link]


Ezt hogyan csinálja? Vagy valójában nem is URLConnection osztályt ad vissza, hanem egy abból származtatott osztályt?



2022. jan. 23. 16:31
 1/10 anonim ***** válasza:

Így:

abstract class URLConnection {...}

class URLConnectionImpl extends URLConnection {...}


class URL {

public URLConnection openConnection() {

return new URLConnectionImpl(...);

}

}

2022. jan. 23. 16:57
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

> Vagy valójában nem is URLConnection osztályt ad vissza, hanem egy abból származtatott osztályt?


meg is válaszoltad a saját kérdésed ;) keress rá a futás idejű polimorfizmusra

2022. jan. 23. 17:49
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

"Az URLConnection osztály absztrakt, és még a konstruktora is protected"

"Az URL osztály openConnection metódusa mégis egy URLConnection osztályt ad vissza"

"Ezt hogyan csinálja? Vagy valójában nem is URLConnection osztályt ad vissza, hanem egy abból származtatott osztályt?"


Minden egyes sorod azt mutatja, hogy nagyon nem vagy tisztában az egésszel amit szeretnéd, ha elmagyaráznánk neked, kb mintha annyit tudnál mi az az osztály, hallottál volna az absztraktról annyit, hogy nem lehet példányosítani, mellé egy kicsi fogalmad lenne arról mi az az öröklés és ennyiben ki is merül a tudásod.

Szerintem egy komplett anyagot keress erről, sőt többet, ne egy-egy részletet akarj kiragadni és választ kapni, mert túl sok hiányosság van még más téren!

2022. jan. 24. 00:46
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:
Olyan anyagot nem találtam, ami ennél mélyebben magyarázza el ezeket a dolgokat.
2022. jan. 24. 21:07
 5/10 A kérdező kommentje:
Az mondjuk igaz, hogy nem értem, mi alapján tesznek abstractá egy osztályt, vagy miért final a String?
2022. jan. 24. 21:37
 6/10 anonim ***** válasza:

régen én sem értettem, de egy nagyon jó példa:


Van az Élőlény osztályod amiből örökölnek a Kutya, Cica, Egér...osztályok, de direktbe nem akarsz létrehozni SOHA Élőlény példányt, csak öröklés útján létezzen

2022. jan. 24. 23:31
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:

Ha van egy nagy öröklésekke l teli osztályod akkor valójában az egy teljes egészében egy darab típus résztípusokra bontva. Castolás, levágás történik amikor te úgy hozol létre egy példányt ,hogy nem lesz elérhető az egész.


Ha egy Mammal típusú obj hoz hozzárendelsz egy mouse obj címét akkor az nem lesz színtaktikailag rossz mert az Emlős valójában egy egér is és fordítva. A lényeg hogy az egér virtuális táblálya lesz használva és nem a Mammal é. Így az egér v táblájában felülírt virtuális metódusok hívódnak majd meg miközben a Mammal ra vagy castolva. Szóval mammalként használod majd az objektumot de a vtáblában felülírt metódusok miatt az egér virtuális metódusai fognak meghívódni. Szóval mammalt használsz kibővítve csak önmagában az egér egyes metódusaival.

2022. jan. 25. 09:42
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Én ezt értem, csak az nem világos (még), hogy miért nem akarom, hogy ne örökölhessenek az én osztályomból (azaz miért teszel finallá).

Illet van pár dolog, ami valamiért nem megy. Kiírtam egy új kérdést, aki tud, kérem segítsen ---> https://www.gyakorikerdesek.hu/szamitastechnika__programozas..

2022. jan. 25. 11:39
 9/10 anonim ***** válasza:

#8 "Én ezt értem, csak az nem világos (még), hogy miért nem akarom, hogy ne örökölhessenek az én osztályomból (azaz miért teszel finallá)."


Leginkább azért, mert nem akarod, hogy megváltozzon a belső logika. Vegyük példának a String osztályt. Tegyük fel, hogy nem final, és lehet belőle származtatni. Innentől ahányszor String típust használsz valahol, lehet hogy egy String-ből származtatott típus húzódik mögötte. Miért lehet ez probléma? Nos, példának okáért a Stringgel szemben vannak bizonyos prekoncepcióink, például hogy immutable, és bármilyen metódust hívsz meg rajta, az nem fogja változtatni a belső reprezentációját a stringnek. Kivéve ha leszármaztattál belőle egy StringButBetter osztályt, és átírtad úgy a létező funkcionalitását, hogy ténylegesen megváltoztatod a belső reprezentációt(vagy csak kibővítetted új funcionalitással ami így tesz, ezzel inkonzisztenssé téve a felépítését). És aztán ott csücsülsz, hogy a string, ami immutable kéne hogy legyen, nem az. Ilyen megfontolásokból tesznek final-á egy osztályt.

2022. jan. 25. 12:45
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:

#9


Értem, köszönöm, így már világos!

2022. jan. 25. 13:52

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | 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!