Az absztrakt adattípust nevezik elvont adattípusnak is? És ezt ADT nek rövidítik?
Üdv!
Java-ban tengődöm egy ideje és valóban létezik olyan, hogy absztrakt osztály, vagy absztrakt metódus.
Valóban nem lehet példányosítani, és ezt egy talán furcsa, de jól szemléltető példával tudnám bemutatni.
Képzelj el egy osztályt, hogy Állatok. Ennek nagyon sok alosztálya lehet, amiket példányosítva miket kapnánk? Milyen "alakja" lenne? Szemben például egy tigrissel.
Tehát képzeld el ezt:
abstract class Animal{}
class Tiger{
public static void main(String[] argv){
Animal animal = new Animal();
}
}
Nem teheted meg, hiszen semmi értelme nem lenne. Ezeket az osztályokat mindig bővítik, hiszen önmagában nem lenne értelme. Hogy a jelenlegi példával éljek, beleírhatsz több olyan metódust, ami igaz több állatra. Például megírsz egy olyat, hogy járkálás. Ez igaz lehet a tigrisre, igaz lehet a tehénre, mindenféle állatra, ezeket pedig öröklik. Elnézést, hogy ilyen állatkerti példával jöttem, de jobb nem jutott hirtelen eszembe.
Egy kérdés?
Fogom tudni példányosítani csak akkor nem ha egy vagy több üres virtuális függvényt deklarálok benne igaz?
"Az absztrakt adattípust nevezik elvont adattípusnak is? És ezt ADT nek rövidítik?"
Igen.
"És egy ilyen osztályt tényleg nem lehet példányosítani?"
Az absztrakt adattípus a programozási elméletben olyan típus, amelyeknek az aktuális definíciója rejtett. A példányhasíthatósága prog nyelv függő. Java-ban nem lehet ahogy @22:14-es írta, a delphi nyelv megalkotói máshogy gondolták, ők úgy gondolták, hogyha egy osztálynak van absztrakt metódusa is akkor példányosítható és az ilyen osztálybeli nem absztrakt metódus hívás lehetséges, ha absztrakt metódusdát hívjuk akkor ez "abstract method exception" kivételt generál.
Még két kérdés ami ehhez kapcsolódik:
Ha egy bázisosztályban deklarálok két üres virtuális függvényt:
virtual void One()const = 0;
virtual void Two()const = 0;
Akkor ha ennek egy származtatott osztályában nem valósítom meg én ezt a két változatot(csak az egyiket) akkor származtatott osztály is absztrakt adattípus lesz(ADT || elvont)?
A másik kérdés ha én megcsinálom a bázisosztályban az üres virtuális függvénynek a megvalósítását akkor azt csak én ennek csak a származtatott osztály ugyanilyen nevű függvényében fogom tudni meghívni a függvényt?
Az elsőre rájöttem ott igen a válasz.
De nem értem azt amit felszivárogtatásnak neveznek.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!