Определение классов
Часть раздела Объектно-ориентированное программирование путешествия по 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