当前位置:嗨网首页>书籍在线阅读

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类。