第四章:类、对象和接口
- Kotlin的声明默认是final和public的。
- 嵌套的类默认并不是内部类,他们并没有包含对其外部类的隐式饮用。
- 没有final的override意味着是open的。
- 抽象类中的非抽象函数并不是默认open的,但是可以标注为open。
- 接口中的成员始终是open的。
- final:不能被重写,类中成员默认使用。
- internal修饰符:在同一模块中可见,在字节码中会变成public。
- Kotlin中的protected:只在类和它的子类中可见。
- 类的扩展函数不能访问private和protected成员。
- 通用规则:类的基础类型和类型参数列表中用到的所有类,或者函数的签名重写都与这个类或函数本身相同的可见性。
- 嵌套类:不存储外部类的引用;内部类:存储外部类的引用。
- Java中:内部类隐式地存储了它的外部类的引用,将一个内部类声明为static(->嵌套类)会从这个类中删除包围它的类的隐式引用。
- Kotlin中:没有显示修饰符的嵌套类与Java中的static嵌套类是一样的。想要变成一个内部类来持有外部类的引用需要使用inner来修饰。
- 重写equals方法会怎样?什么东西被破坏了?问题在哪里?答:(通用的hashCode契约:如果;两个对象相等,他们必须具有相同的hash值)HashSet会先比较它们的hash值,只有他们相等时才会去比较真正的值。
- data:类修饰符,重写所有Java标准方法
- by:类委托,使用by关键字将接口的实现委托到另一个对象
- object:可以用来定义单例
- kotlin中的类不能拥有静态成员(伴生对象解决此问题
- 伴生对象是一个声明在类中的普通对象,可以有名字、实现接口、或者有扩展函数或者属性。为了能够为类定义扩展,必须在其中声明一个companion object,即使是一个空的。