在 Kotlin 中,class
、data class
、internal class
、abstract class
、open class
、sealed class
和 inner class
都是不同类型的类,各自有其独特的用途和特性,下面为你详细介绍它们的区别:
1. class
(普通类)
- 可以定义各种类型的成员,如属性、方法、嵌套类等。
- 可以有自定义的构造函数和初始化块。
- 可以继承其他类和实现接口。
2. data class
(数据类)
- 自动生成
equals()
、hashCode()
、toString()
和copy()
方法。 - 主构造函数至少需要一个参数,且所有参数必须标记为
val
或var
。 - 数据类不能是
abstract
、open
、sealed
或inner
的。
3. internal class
(内部类)
- 访问权限是模块级别的,同一个模块内的代码可以访问
internal
类。 - 可以包含各种类型的成员,如属性、方法、嵌套类等。
4. abstract class
(抽象类)
- 不能被实例化。
- 可包含抽象方法和具体方法。
- 子类必须实现抽象类中的所有抽象方法。
5. open class
(开放类)
- 可以被继承。
- 类中的方法和属性默认是
final
的,若要让它们能被重写,也需要使用open
关键字。
6. sealed class
(密封类)
- 用于表示受限的类层次结构。
- 所有子类必须在与密封类相同的文件中声明。
- 在
when
表达式中使用密封类时,不需要else
分支。
7. inner class
(内部类)
- 可以访问外部类的成员,包括私有成员。
- 内部类会持有一个对外部类实例的引用。
总结
class
:用于创建常规类,默认不可被继承。data class
:主要用于保存数据,自动生成常用方法。internal class
:访问权限为模块级别。abstract class
:不能被实例化,可包含抽象方法,子类需实现抽象方法。open class
:可以被继承,类和成员默认不可重写,需用open
修饰。sealed class
:表示受限的类层次结构,子类需在同一文件中声明。inner class
:定义在另一个类内部,可访问外部类成员。