Kotlinova abstraktní třída a abstraktní členové

V tomto článku se dozvíte o abstraktní třídě a o tom, jak ji implementovat v Kotlin (pomocí příkladů).

Stejně jako Java se abstractklíčové slovo používá k deklaraci abstraktních tříd v Kotlin. Nelze vytvořit instanci abstraktní třídy (nemůžete vytvářet objekty abstraktní třídy). Z nich však můžete zdědit podtřídy.

Členové (vlastnosti a metody) abstraktní třídy nejsou abstraktní, pokud je výslovně nepoužijete pomocí abstractklíčového slova k tomu, aby byly abstraktní. Vezměme si příklad:

 abstraktní třída Osoba (var věk: Int = 40 zábavných displaySSN (ssn: Int) (println ("Moje SSN je $ ssn.")) abstraktní zábavná displayJob (popis: Řetězec))

Tady,

  • Personje vytvořena abstraktní třída . Nemůžete vytvářet objekty třídy.
  • třída má non-abstraktní vlastnost stáří a non-abstraktní metoda displaySSN(). Pokud potřebujete tyto členy v podtřídě přepsat, měli by být označeni openklíčovým slovem.
  • Třída má abstraktní metodu displayJob(). Nemá žádnou implementaci a musí být přepsána ve svých podtřídách.

Poznámka: Abstraktní třídy jsou vždy otevřené. openK dědění podtříd od nich nemusíte explicitně používat klíčové slovo.

Příklad: Kotlinova abstraktní třída a metoda

 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) )

Když spustíte program, výstup bude:

Jmenuji se Jack Smith. Jsem učitel matematiky. Moje SSN je 23123.

Tady je třída Teacherodvozena od abstraktní třídy Person.

Je vytvořena instance objektu jack třídy Učitel. Při "Jack Smith"vytváření jsme předali jako parametr primárnímu konstruktoru. Tím se provede inicializační blok Persontřídy.

Pak se displayJob()metoda nazývá pomocí jack objektu. Všimněte si, že displayJob()metoda je v základní třídě deklarována jako abstraktní a v odvozené třídě přepsána.

Nakonec se displaySSN()metoda nazývá pomocí jack objektu. Metoda není abstraktní a deklarovaná ve třídě Person (a není deklarována ve Teachertřídě).

Doporučená literatura: Kotlin Interfaces

Rozhraní Kotlin jsou podobná abstraktním třídám. Rozhraní však nemohou ukládat stav, zatímco abstraktní třídy ano.

To znamená, že rozhraní může mít vlastnost, ale musí být abstraktní nebo musí poskytovat implementace přístupového objektu. Vzhledem k tomu, že není povinné, aby byla vlastnost abstraktní třídy abstraktní.

Zajímavé články...