TL;DR
Kotlinの仕様として不可能だが、拡張関数として実装すれば同様の状態は実現できる。
interface Foo
fun Foo.func(...) { ... }
状況
interfaceのデフォルト実装はfinalに出来ず、常にoverride可能です。
interface Foo {
fun func(...) {...}
}
class FooImpl : Foo {
override fun func(...) { ... }
}
final化したい場合は、冒頭で紹介したように、拡張関数として定義することで実現できます。
以下のような実装に役立ちます。
補足
Kotlinの元プロジェクトリーダーであるRoman Elizarov氏は「It is exactly how "final fun in interface" are supposed to be represented in Kotlin by design.」と回答しています。
少なくとも、2018年時点ではこれが推奨される手法だったと言えるでしょう。