06-抽象类
5.3 抽象类
抽象是面向对象编程的重要特征之一,可以通过抽象类和接口来完成,抽象类和接口有很多相似之处,也有很多不同之处。
1.抽象方法
抽象是一种特殊的方法,它只有声明,没有具体的实现。抽象方法的声明格式如下。
abstract fun 方法名
2.抽象属性
使用abstract关键字修饰的属性称为抽象属性,抽象类中定义的属性均为抽象属性。抽象属性的格式如下。
abstract var/val 属性名: 属性类型
对于抽象属性应注意几点。
- 抽象属性只能在抽象类中声明。
- 抽象属性在抽象类中不能被初始化。
- 在没有主构造函数的子类中,要手动初始化抽象属性;在子类中有主构造函数的情况下,抽象属性可以在主构造函数中声明。
3.抽象类
含有抽象方法的类,称为抽象类。在抽象类中,不仅可以有抽象方法,还可以有具体实现的方法。代码如下。
abstract class Person(var name : String, var age : Int) : Any() {
abstract var addr : String
abstract val weight : Float
abstract fun doSwim()
fun doFly() {
println("doFly")
}
fun doEach() {
println("doEach")
}
}
抽象类作为一种特殊的类,和普通类之间主要有以下几点区别。
- 抽象方法必须为public或者protected,因为如果为private,则不能被子类继承,子类也无法实现该方法,缺省情况下为public。
- 抽象类不能用来创建对象。
- 如果一个类继承于抽象类,则子类必须实现父类的抽象方法;如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。