在kotlin中存在

  1. 修饰符
    1.1. 在 Kotlin 中,修饰符有:open/final,private/protected/internal/public
    1.2 open/final:一个类能不能被继承。
    1.3. private/protected/internal/public:一个类中或 Kotlin 文件中的变量或方法能不能被其他类或其他 Kotlin 文件访问。

  2. open/final
    2.1 一个类在类的定义前加上 open 修饰符才可以被继承。如果没有加 open 关键字,那么默认是 final,即不可被继承的。
    2.2 被 open 修饰的类中只有被 open 修饰的属性或方法才可以被子类重写,如果在属性或方法前没有加 open 关键字,那么默认是 final,是不可被覆盖重写的。
    2.3 在子类中覆盖重写父类中的属性或方法是,需要使用关键字 override 修饰。
    2.4 子类中重写了父类的属性或方法,那么此时子类中的属性或方法没有加 open 关键字,子类的子类也是可以重写的,也就是 override 默认是 open 的。如果不想被子类的子类进行重写,需要显示用 final 修饰。
    2.5 在 Kotlin 中,接口不需要加上 open 修饰符。接口本身和它内部的方法和属性都是默认加上 open 修饰符的,而普通类默认是加上 final 修饰符。而且在接口中也不能手动加上 final 修饰符,因为接口的作用就是为了抽象,如果不能被赋值或实现,那么接口就没用了。

  3. private/protected/internal/public
    3.1 这4个修饰符为可见性修饰符。
    (1) 如果用 private 修饰,那么只能在这个类的内部(包含其所有成员)可见;
    (2) 如果用 protected 修饰,不但可以在类内部可见,在子类中也可见;
    (3) 如果用 internal 修饰,则类声明的本模块内的客户端都可见(模块的概念同 Java 中包的概念);
    (4) 如果用 public 修饰,则任何地方可见。在 Kotlin 中,如果没有显示指定 private/protected/internal/public 这几个修饰符,那么默认是 public。


这就是java和kotlin的一个区别,因此想要实现和java一样的某些功能,我们得使用protected来实现。而不能使用private