Это одна из тех тем, которую вроде бы все знают, но многие путаются. Давайте разберёмся. Здесь всё просто: В Java: public class Cat { } В Kotlin: class Cat { } // по умолчанию public public — доступно везде. И в Java, и в Kotlin это работает одинаково. В Java: public class Cat { private void meow() {} } В Kotlin: class Cat { private fun meow() {} } В обоих языках private означает: видно только внутри текущего класса. Но в Kotlin есть одна фишка: мы можем писать private на уровне файла. Этот secret будет доступен только в этом .kt-файле. Это удобно, чтобы, например, прятать константы или что-то, что не должно быть видно снаружи. В Java protected — это когда метод/параметр доступен: В Kotlin: Фишка в том, что в Kotlin protected доступен только внутри самого класса и его наследников, и только изнутри этих классов. То есть мы не можем извне вызвать kitty.meow() даже если это наследник. Только внутри самого класса-наследника. В Java нет internal. А в Kotlin это суперполезная штука: такой