Hirdetés
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- HTPC (házimozi PC) topik
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Milyen kompakt digitális fényképezőgépet?
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Milyen belső merevlemezt vegyek?
- OLED TV topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Amlogic S905, S912 processzoros készülékek
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
"Az absztrakt osztály lényege, hogy ez egy osztály, aminek néhány függvénye csak deklarálva van, de nincsenek definiálva (abstract függvények). Ez azt jelenti, hogy az osztály megmondja, hogy milyen pontosan függvényekre van szükség a működéséhez, de ezeket a függvényeket a leszármazottak kötelesek implementálni."
Ezt azért javítanám, mert ez így nem teljesen igaz.
Amit Te írsz, vagyis az, hogy egy osztály nem tartalmaz definíciókat, hanem csupán tartalmazza azon metódusok deklarációját, amelyeknek definícióját majd az azt megvalósító osztályoknak tartalmaznia kell, az inkább az interface-re vonatkozik: [link].
Az absztrakt osztály igenis tartalmazhat metódusdefiníciókat, mivel egy absztrakt osztálynak nem feltétlenül absztrakt az összes metódusa - lásd ezt a példát php.net-ről. Lehetnek tehát olyan osztályok, amelyek megvalósítják az absztrakt osztályt, és az ősosztályban eleve definiált függvényt fel is tudják használni, anélkül, hogy ez explicite felül lett volna bírálva - DE akár az absztrakt osztályban eredetileg is definiált metódust felül is írhatja a leszármazott osztály egy azonos nevű és visszatérési értékű metódussal.Írtam pár rövid példát a szemléltetésre:
abstract class AbstractClassExample{
public abstract function cannotBeDefinedInAbstract(){
echo 'This is an abstract function in abstract class - gives an ERROR, it won\'t be echoed!';
}
}Ez nyilvánvalóan rossz, mert abstract függvénynek nem lehet függvénytörzse, hibát is kapunk rá:
"Fatal error: Abstract function AbstractClassExample::cannotBeDefinedInAbstract() cannot contain body in D:\Honlap\www\proba\index_2.php on line 6"
Ha az adott sort lecseréljük így:
public abstract function cannotBeDefinedInAbstract();
akkor már nem kapunk hibát.A többi esettel kiegészítve itt egy hosszabb példa:
<?php
abstract class AbstractClassExample{
public abstract function cannotBeDefinedInAbstract();
public function itsAlreadyImplementedInAbstractButCanBeOverridden(){
echo 'This is derived from the abstract class!';
}
}
class ExtendsAbstract extends AbstractClassExample{
public function cannotBeDefinedInAbstract() {
echo 'This is the implemented function in derived class!';
}
public function anotherFunction(){
echo 'This is just anonther example function.';
}
}
$extendedClass = new ExtendsAbstract();
$extendedClass->cannotBeDefinedInAbstract();
echo '<br />';
$extendedClass->itsAlreadyImplementedInAbstractButCanBeOverridden();
echo '<br />';
$extendedClass->anotherFunction();
echo '<br />';
?>Ennek kimenete a következő:
This is the implemented function in derived class!
This is derived from the abstract class!
This is just anonther example function.Az itsAlreadyImplementedInAbstractButCanBeOverridden() függvény tehát egy absztrakt osztályban lett megvalósítva, a leszármazott osztály mégis eléri, és megfelelően meg is valósítja az ott szereplő kiírást.
Ez azonban felülbírálható:
class ExtendsAbstract extends AbstractClassExample{
public function cannotBeDefinedInAbstract() {
echo 'This is the implemented function in derived class!';
}
public function itsAlreadyImplementedInAbstractButCanBeOverridden() {
parent::itsAlreadyImplementedInAbstractButCanBeOverridden();
echo '<br />This comes from the derived class.';
}
public function anotherFunction(){
echo 'This is just anonther example function.';
}
}Ebben az esetben az ExtendsAbstract függvényben is megvalósítjuk az említett itsAlreadyImplementedInAbstractButCanBeOverridden() függvényt, így az felül lesz bírálva, a parent::itsAlreadyImplementedInAbstractButCanBeOverridden(); sorral viszont továbbra is érvényesül a szülőben implementált függvény összes feladata, így a kimenet a következőre módosul:
This is the implemented function in derived class!
This is derived from the abstract class!
This comes from the derived class.
This is just anonther example function.
Új hozzászólás Aktív témák
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- HTPC (házimozi PC) topik
- Kínai és egyéb olcsó órák topikja
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- PROHARDVER! feedback: bugok, problémák, ötletek
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Bestbuy játékok
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Kézbe fogható paradoxon lett az iPhone Air
- Kertészet, mezőgazdaság topik
- További aktív témák...
- X1 Carbon 9th 14" FHD+ IPS érintő i7-1185G7 16GB 512GB NVMe ujjolv IR kam gar
- Latitude 9430 2-in-1 27% 14" QHD+ IPS érintő i7-1265U 16GB 512GB NVMe ujjlolv gar
- Apple Watch Series SE3 Alu 40/44 mm GPS/Cell - bontatlan - 1 év Apple garancia
- Apple Watch Series 11 Titán 42/46 mm Sport/Milanaise- bontatlan - 1 év Apple garancia
- ZBook Firefly 14 G10 14" QHD+ IPS i7-1370P 16GB 512GB NVMe ujjlolv IR kam gar
- HP ZBook Studio G8 WorkStation i7-11850H 32GB 1000GB Nvidia Quadro T1200 400NIT, 100% sRGB Garis!
- Bomba ár! Dell Latitude E5570 Touch - i5-6300U I 8GB I 256SSD I 15,6" FHD I HDMI I CAM I W10 I Gari
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 13 256GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3428
- Lenovo ThinkPad T480, T580, P51s, P52s, T480s belső akkumulátor eladó
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest