Ebben a cikkben megtudhatja az absztrakt osztályt és annak megvalósítását Kotlinban (példák segítségével).
A Java-hoz hasonlóan a abstract
kulcsszót is használják az absztrakt osztályok deklarálására Kotlinban. Az absztrakt osztály nem példányosítható (nem hozhat létre absztrakt osztály objektumait). Alosztályokat azonban örökölhet tőlük.
Az absztrakt osztály tagjai (tulajdonságai és módszerei) nem elvontak, hacsak nem kifejezetten abstract
kulcsszót használsz absztraktvá. Vegyünk egy példát:
absztrakt osztály Személy (változó kor: Int = 40 szórakoztató kijelzőSSN (ssn: Int) (println ("Az SSN-m $ ssn.")) elvont szórakoztató displayJob (leírás: String))
Itt,
- absztrakt osztály
Person
jön létre. Nem hozhat létre objektumokat az osztályból. - az osztálynak nem elvont tulajdonosi kora és nem elvont módszere van
displaySSN()
. Ha felül kell írnia ezeket a tagokat az alosztályban, azokatopen
kulcsszóval kell megjelölni . - Az osztály elvont módszerrel rendelkezik
displayJob()
. Nincs megvalósítása, és alosztályaiban felül kell írni.
Megjegyzés: Az absztrakt osztályok mindig nyitottak. Nem kell kifejezetten open
kulcsszót használnia, hogy alosztályokat örököljön tőlük.
Példa: Kotlin absztrakt osztály és módszer
abstract class Person(name: String) ( init ( println("My name is $name.") ) fun displaySSN(ssn: Int) ( println("My SSN is $ssn.") ) abstract fun displayJob(description: String) ) class Teacher(name: String): Person(name) ( override fun displayJob(description: String) ( println(description) ) ) fun main(args: Array) ( val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) )
A program futtatásakor a kimenet a következő lesz:
A nevem Jack Smith. Matematikatanár vagyok. Az SSN-m 23123.
Itt egy osztály Teacher
absztrakt osztályból származik Person
.
A tanár osztály objektum jackje példányos. Van telt "Jack Smith"
, mint a paraméter az elsődleges kivitelező a létrehozás során. Ez végrehajtja az Person
osztály inicializáló blokkját .
Ezután a displayJob()
metódust jack objektum segítségével hívják meg. Ne feledje, hogy a displayJob()
metódust az alaposztályban absztraktnak, a származtatott osztályban felülírják.
Végül a displaySSN()
metódust jack objektum segítségével hívják meg. A módszer nem absztrakt és a Person osztályban van deklarálva (és nem az Teacher
osztályban van deklarálva ).
Ajánlott irodalom: Kotlin interfészek
A Kotlin interfészek hasonlóak az absztrakt osztályokhoz. Az interfészek azonban nem tárolhatják az állapotot, míg az absztrakt osztályok képesek.
Jelentése: az interfésznek lehet tulajdonsága, de absztraktnak kell lennie, vagy hozzáférési megvalósításokat kell biztosítania. Ugyanakkor nem kötelező, hogy az absztrakt osztály tulajdonságai elvontak legyenek.