Определение классов
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 2 из 57.
Класс описывает вид объекта: данные, которые он хранит, и то, что он умеет делать. class Dog { ... } объявляет тип, а Dog() создаёт объект этого типа — экземпляр. В Kotlin нет ключевого слова new:
class Dog {
var name = "Rex"
var age = 3
}Внутри main:
val dog = Dog()
println(dog.name)
println(dog.age)Вывод:
Rex
3Переменные внутри класса — это его свойства. У каждого экземпляра есть собственная копия, которую можно прочитать и изменить через точку:
class Dog {
var name = "Rex"
}Внутри main:
val first = Dog()
val second = Dog()
second.name = "Bella"
println(first.name)
println(second.name)Вывод:
Rex
BellaФункция внутри класса называется методом (в Kotlin их называют функциями-членами). Метод может читать и изменять свойства экземпляра, для которого он вызван:
class Counter {
var count = 0
fun increment() {
count++
}
fun report() = "count is $count"
}Внутри main:
val clicks = Counter()
clicks.increment()
clicks.increment()
println(clicks.report())Вывод:
count is 2Имена классов используют формат UpperCamelCase (BankAccount); свойства и методы используют формат lowerCamelCase (balance, deposit()). Группировка данных с функциями, которые с ними работают, — основная идея объектно-ориентированного программирования: код, использующий Counter, вызывает increment(), и ему никогда не нужно знать, как хранится счётчик.
class BankAccount {
var balance = 0
fun deposit(amount: Int) {
balance += amount
}
}Задание
ЛегкоЗаверши метод describe() класса Pet. Он возвращает одно предложение, составленное из свойств: питомец по имени Rex, вида dog, возрастом 3 даёт Rex is a 3 year old dog.
Предоставленный код создаёт объект Pet, задаёт его свойства на основе входных данных (имя, вид, возраст) и выводит результат describe().
Твой код нужно поместить в Pet.kt. В Main.kt находится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
fun main() {
// Предоставленный код ввода-вывода: оставьте его без изменений
val input = generateSequence(::readLine).toList()
val pet = Pet()
pet.name = input[0]
pet.species = input[1]
pet.age = input[2].toInt()
println(pet.describe())
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin