Ответ
Изменение поведения класса может нарушить принцип открытости/закрытости (Open/Closed Principle). Существующий код, зависящий от этого класса, может сломаться. Лучше расширять функциональность через наследование или композицию.
Пример плохого подхода:
class Logger {
fun log(message: String) {
println(message) // Было так
// Добавили запись в файл - ломаем существующих клиентов
File("log.txt").appendText(message)
}
}
Лучше использовать стратегию:
interface Logger {
fun log(message: String)
}
class ConsoleLogger : Logger {
override fun log(message: String) = println(message)
}
class FileLogger : Logger {
override fun log(message: String) {
File("log.txt").appendText(message)
}
}