Классы и объекты в Kotlin
Класс — это структура, описывающая поведение и возможности объектов. На основе класса создаются объекты с похожим функционалом, но разными значениями.
Создание класса
Для создания класса создайте новый Kotlin-файл (тип «Class») в папке src. Рассмотрим создание класса вручную, чтобы лучше понять ключевые слова.
Назовите файл (и класс) User. Простейший класс:
class User
Это готовый, хотя и пустой, класс. Фигурные и круглые скобки здесь не нужны.
Создание объекта
Создадим объект класса User:
val alex = User()
Это создаёт объект alex. Пока класс пуст, тестировать его нечего.
Добавление функциональности
Добавим переменные и функцию:
class User {
var firstName: String = "Alex"
var secondName: String = "Marley"
fun printUser() {
println("$firstName $secondName")
}
}
fun main() {
val alex = User()
alex.firstName = "Alexander"
alex.printUser()
}
Созданы переменные firstName и secondName типа String, им присвоены значения, и создана функция printUser() для вывода данных.
Конструкторы
Изменение значений через объект неудобно. Используем конструкторы для передачи параметров:
class User(firstName: String, secondName: String) {
var firstName: String
var secondName: String
init {
this.firstName = firstName
this.secondName = secondName
}
}
fun main() {
val alex = User("Alex", "Marley")
val john = User("John", "Doe")
println(alex.firstName)
println(john.firstName)
}
При создании объекта передаются параметры firstName и secondName, инициализирующие переменные. Если конструктор не задан, Kotlin создаёт его по умолчанию.
Сокращение кода с init блоком
Код можно сократить, используя блок init:
class User(firstName: String, secondName: String) {
var firstName: String = firstName
var secondName: String = secondName
}
Параметры присваиваются переменным класса. Блок init здесь необязателен.
Сокращение кода: прямое присваивание
Ещё короче:
class User(var firstName: String, var secondName: String)
Параметры конструктора одновременно объявляют и инициализируют переменные.
Несколько конструкторов
Класс может иметь несколько конструкторов:
class User(var firstName: String = "Peter", var secondName: String = "Patrick") {
init {
println("Данные были установлены")
}
constructor(firstName: String): this(firstName, "Patrick") {
//Дополнительный код
}
}
fun main() {
val user1 = User("Alex", "Marley")
val user2 = User()
val user3 = User("Bob")
println(user1.firstName)
println(user2.firstName)
println(user3.firstName)
}
Основной конструктор задаёт значения по умолчанию, дополнительный — принимает только firstName, используя значение по умолчанию для secondName.
val и var
var — переменные, которые можно изменять, val — только для чтения:
class User(var firstName: String, var secondName: String) {
val login: String? = null
}
login — переменная только для чтения.
Getter и Setter
Добавим getter и setter:
class User(var firstName: String, var secondName: String) {
var login: String? = null
set(value) {
println("Устанавливаем значение: $value")
field = if (value == "code") "anon" else value
}
get() {
val loginField = if (field == null) "Неизвестно" else field
println("Переменная равна: $loginField")
return loginField
}
}
fun main() {
val user = User("Alex", "Marley")
user.login = "code"
println(user.login)
}
setter проверяет и устанавливает значение. getter выводит информацию и возвращает значение.
Модификаторы доступа
Модификаторы доступа определяют видимость:
- public (по умолчанию): доступен отовсюду.
- internal: доступен внутри модуля.
- private: доступен только внутри класса.
- protected: доступен внутри класса и его наследников (в Kotlin для классов не используется).
internal class User(var firstName: String, var secondName: String) {
private fun printUser() {
println("$firstName $secondName")
}
}
printUser() имеет модификатор private и доступна только внутри класса User.
Рассмотрено создание классов и объектов в Kotlin, включая конструкторы, getter и setter, модификаторы доступа и способы инициализации переменных. Kotlin предоставляет гибкие инструменты для объектно-ориентированного программирования.