- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Milliókkal olcsóbb a Model Y Standard Magyarországon
- Apple iPhone 16 Pro - rutinvizsga
- iPhone topik
- Újradefiniálja a Xiaomi 17, milyen egy kompakt csúcstelefon
- Fotók, videók mobillal
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Apple iPhone Air - almacsutka
- Megérkezett Magyarországra a legkülönlegesebb kameratelefon
- Samsung Galaxy S24 - nos, Exynos
Hirdetés
(használd a CYBSEC25PH kuponkódot további 20 ezer ft kedvezményért!)
Új hozzászólás Aktív témák
-
modder
aktív tag
válasz
pvt.peter #2057 üzenetére
Hali. Polimorfizmus (többalakúság, ugyanolyan ős típusú objektumok másképpen viselkedhetnek). Amikor több osztályod van, ami ugyanazokat a tulajdonságokat (metódusokat) definiálja, ezért közös ősből származik, de mégis minden osztály egy kicsit másképpen viselkedik, vagyis kicsit más az implementációjuk, viszont az interfészük (amit az osztály használója lát) megegyezik.
Most hirtelen a Java JDBC API jut eszembe:
//Create the connection using the static getConnection method
Connection con = DriverManager.getConnection (connectionURL);
//Create a Statement class to execute the SQL statement
Statement stmt = con.createStatement();Itt a DriverManager egy factory osztály, ami olyan Connection példányt ad vissza, ami adatbázis specifikus a szerint, hogy milyen adatbázis típus szerepel a connection URL-ben. A Connection csak egy interfész, minden konkrét adatbázis JDBC driver a sajátját specifikálja, és a konkrét, con változóhoz kötött példány lehet, hogy mondjuk MysqlConnection típus lesz. Itt a lényeg az, hogy a MysqlConnection a Connection-ből származik, és felülírja a Connection metódusait.
Ami fontos megjegyezni futás időben fog eldőlni, hogy melyik metódus fog meghívódni, mert fordításkor lehetetlen eldönteni a fenti kódrészletből, hogy a con változó konkrétan milyen osztály lesz.
C++-ban explicite ki kell írnod a virtual kulcsszót a függvény elé. Ha nem teszed ki, akkor is felülírhatod a metódust, de nem biztos, hogy azt az eredményt fogod kapni, amit vársz. Például
class A {
public:
void valami() { std::cout << "A"; }
virtual void virt() { std::cout << "A"; }
}
class B : A {
public:
void valami() { std::cout << "B"; }
void virt() { std::cout << "B"; }
}A b = new B();
b.valami(); // "A" fog kiíródni, mert valami() nem virtuális, tehát a változó "statikus" típusa alapján dől el, hogy melyik metódus fog meghívódni. A statikus típus pedig "A"B b = new B();
b.valami(); // itt a statikus típus "B", tehát "B" fog kiírodóni.Ezzel szemben
A b = new B();
b.virt(); // itt "B" fog kiíródni azért, mert a virt() függvény virtuális. futás időben a virtuális függvény táblából a program megnézi, hogy melyik konkrét függvény hívódjon meg. Mindezt a b változó futásidejű (dinamikus) típusa alapján, ami itt "B"Heterogén kollekciókban szokták hasznát venni, amikor (mint az első példában) egy közöt ős van, ami szolgáltatja az interfészt, de többféle implementációt tárolsz egy tömbben vagy listában. Amikor végigiterálsz rajtuk, hogy meghívd mindegyiken valamelyik metódusát, nem kell foglalkoznod a konkrét típussal, ami nagyban leegyszerűsíti a programozó munkáját. Ez annyira az általános elvárt működés, hogy Javában minden metódus virtuális. Ha nem akarod, hogy valamelyiket felül lehessen írni, akkor a final kulcsszót kell elé tenni.
Amikor egy osztályt kiterjeszthetőségre tervezel, ki kell választanod azokat a metódusait, amiket felül lehet majd írni, és virtuálissá teszed őket. Ezzel elég körültekintőnek kell lenned, mert egy felülírt virtuális metódus a származtatott osztályban el is ronthatja az alap működést.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Heroes of Might & Magic: Olden Era
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Synology NAS
- Milliókkal olcsóbb a Model Y Standard Magyarországon
- Sokkal drágább lett az „olcsó” Tesla, mint várták
- Sweet.tv - internetes TV
- Vezetékes FEJhallgatók
- Autós topik
- Battlefield 6
- LEGO klub
- További aktív témák...
- Dell OptiPlex 3070 SFF i3-9100/8GB/256SSD/ számla, garancia!
- Fujitsu Lifebook U939X Black /magyar bill/ - garanciális, használt
- Apple iPhone 13 Pro Max 256GB, Kártyafüggetlen, 1 Év Garanciával
- Új! - Lenovo IdeaPad Slim 3 Arctic Grey i3/8gb/512ssd - billentyűzet világítás
- Fractal Design 1000W Moduláris Tápegység
- GYÖNYÖRŰ iPhone 13 Pro 256GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3359
- Honor 200 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- HIBÁTLAN iPhone 13 256GB Starlight -1 ÉV GARANCIA - Kártyafüggetlen, MS3663, 100% Akkumulátor
- Huawei Watch GT 5 Pro 42mm, 1 Év Garanciával
- SzinteÚJ! HP Elitebook 860 G10 i7-1355U 16GB 512GB 16" FHD+ Gar.: 1 év
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest