🗒 Задача¶
В компьютерной игре существуют планеты. У некоторых из них есть спутники.
Планеты и спутники могут иметь атмосферу и могут быть пригодными для высадки.
Создай родительский класс, описывающий небесные тела, и подклассы, описывающие планеты и спутники.
- планета должна хранить список спутников.
Создай планету с двумя спутниками и выведи в консоль название планеты и названия всех ее спутников.
❌ Ошибки¶
- у планеты список сателлитов делают строкой — нужен список объектов
✏️ Комментарии¶
По поводу названия. Класс – это своеобразный шаблон какого-то будущего конкретного экземпляра. Называть класс во множественном числе в данной ситуации некорректно. Если нужно много сателлитов, то у будущем нужно будет создавать списки этих объектов.
Не забывай применять автоформатирование в Идее перед коммитом, что бы пробелы и отступы правильно расставлялись. Это шорткат ctrl + alt + L
Давай уточним здесь, что это не просто список. Тут нужен список объектов (или сущностей) с типом саттелита
В некоторых классах у тебя есть trailling comma, в некоторых отсутствует. Лучше ставить. Но еще лучше соблюдать единый стиль везде.
🧾 Решение¶
open class CelestialBody(
val name: String,
val hasAtmosphere: Boolean,
val isSuitableForLanding: Boolean,
)
class Planet(
name: String,
hasAtmosphere: Boolean,
isSuitableForLanding: Boolean,
private val satellites: List<Satellite>,
) : CelestialBody(name, hasAtmosphere, isSuitableForLanding) {
fun printSatellites() {
println("Планета $name имеет следующие спутники: ")
satellites.forEach { println(it.name) }
}
}
class Satellite(
name: String,
hasAtmosphere: Boolean,
isSuitableForLanding: Boolean
) : CelestialBody(name, hasAtmosphere, isSuitableForLanding)
fun main() {
val satellite1 = Satellite("Луна", false, true)
val satellite2 = Satellite("Луна 2", true, false)
val planet = Planet("Земля", true, true, listOf(satellite1, satellite2))
planet.printSatellites()
}