English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете о абстрактных классах и как реализовывать абстрактные классы в Kotlin (с примерами).
Как и в Java, ключевое слово abstract используется в Kotlin для объявления абстрактных классов. Абстрактные классы не могут быть инстанцированы (не можно создать объект абстрактного класса). Однако вы можете наследовать от них подклассы.
Как и в Java, ключевое слово abstract используется в Kotlin для объявления абстрактных классов. Абстрактные классы не могут быть инстанцированы (не можно создать объект абстрактного класса). Однако вы можете наследовать от них подклассы.
abstract class Person { var age: Int = 40 fun displaySSN(ssn: Int) { println("Мой номер социального страхования — $ssn.") } abstract fun displayJob(description: String) }
Здесь,
Создайте абстрактный класс Person. Вы не можете создать объект этого класса.
Этот класс имеет неабстрактные свойства age и неабстрактный метод displaySSN(). Если вам нужно переопределить эти члены в подклассе, вы должны пометить их ключевым словом open.
Этот класс имеет абстрактный метод displayJob(). У него нет реализации, и его необходимо переопределить в подклассе.
Обратите внимание:Абстрактные классы всегда открыты. Вам не нужно явно использовать ключевое слово open для наследования от них подклассов.
abstract class Person(name: String) { init { println("Мое имя — $name.") } fun displaySSN(ssn: Int) { println("Мой номер социального страхования — $ssn.") } abstract fun displayJob(description: String) } class Teacher(name: String) : Person(name) { override fun displayJob(description: String) { println(description) } } fun main(args: Array<String>) { val jack = Teacher("Jack Smith") jack.displayJob("Я математический учитель.") jack.displaySSN(23123) }
При выполнении этого программы, вывод будет следующим:
Мое имя — Jack Smith. Я математический учитель. Мой номер социального страхования — 23123.
Здесь класс Teacher наследуется от абстрактного класса Person
Объект класса Teacher jack был создан. При создании главного конструктора мы передаем ему параметр «Jack Smith». Это выполнит инициализатор класса Person.
Затем вызовите метод displayJob() объекта Jack. Обратите внимание, что метод displayJob() объявлен как абстрактный в базовом классе и overridden в производном классе.
В конце концов, вызовите метод displaySSN() объекта Jack. Этот метод не абстрактный и объявлен в классе Person (а не в классе Teacher).
См. также: Интерфейсы Kotlin
Интерфейсы Kotlin ähnlich wie абстрактные классы. Однако, интерфейсы не могут хранить состояние, в то время как абстрактные классы могут.
Таким образом, интерфейс может иметь свойства, но они должны быть абстрактными или должны предоставлять реализацию доступщиков. Однако, свойства абстрактного класса не обязательно должны быть абстрактными.