kotlin классы имеют properties, которые по факту являются backing field + getter + setter. Т.е. то что в java
publicclass Box {
privatefinalint volume;
// конструктор, геттер, сеттер
}
в котлине будет
class Box(val volume:Int)
Кроме того, классы, проперти, методы по умолчанию имеют модификатор public, а package-private(default) модификатора в котлине нет. internal - не совсем то, что надо. В отл. от java, в kotlin внешний класс не видит private методов внутренних классов. Классы в kotlin могут иметь первичный и вторичные конструкторы, которые обязаны использовать первичный (this()), а так же есть блок init{} (аналог static{} в java, но для инита не-статик полей). В java ты просто объявляешь несколько конструкторов, которые не связаны друг с другом. В котлине абстрактные классы могут быть sealed, тогда его наследниками могут быть только внутренние классы. По умолчанию все классы в kotlin являются final. Чтобы можно было от него наследоваться, его надо сделать open, либо abstract/sealed.