Перейти к содержанию

🗒 Задача

В компьютерной игре существуют планеты. У некоторых из них есть спутники.

Планеты и спутники могут иметь атмосферу и могут быть пригодными для высадки.

Создай родительский класс, описывающий небесные тела, и подклассы, описывающие планеты и спутники.

  • планета должна хранить список спутников.

Создай планету с двумя спутниками и выведи в консоль название планеты и названия всех ее спутников.

❌ Ошибки

  • у планеты список сателлитов делают строкой — нужен список объектов

✏️ Комментарии

Корректнее сделать сателлит наследником небесного тела
По поводу названия. Класс – это своеобразный шаблон какого-то будущего конкретного экземпляра. Называть класс во множественном числе в данной ситуации некорректно. Если нужно много сателлитов, то у будущем нужно будет создавать списки этих объектов.
Не забывай применять автоформатирование в Идее перед коммитом, что бы пробелы и отступы правильно расставлялись. Это шорткат 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()
}