Назад к вопросам
JuniorТеорияЧасто
Что выведет программа (строки через пробел)?
class Animal {
func speak() { print("animal") }
}
class Dog: Animal {
override func speak() {
print("dog")
super.speak()
}
}
let pet: Animal = Dog()
pet.speak()dog animal
- Ждать
animal: считать, что объявленный типAnimalрешает, какойspeak()запустится. Экземпляр —Dog, поэтому выполняется его переопределённая версия. - Ждать
animal dog: считать, что версия родителя всегда выполняется первой.super.speak()выполняется ровно там, где его вызывает переопределённый метод.
- Что напечатала бы программа без строки
super.speak()? - Что изменится, если пометить метод
speak()уAnimalсловомfinal?