美文网首页
Kotlin抽象类与接口 (1)抽象类

Kotlin抽象类与接口 (1)抽象类

作者: 狼性代码人 | 来源:发表于2019-06-03 15:56 被阅读0次
    • 抽象类概念
    • 抽象类声明和实现

    一、抽象类概念

    • 抽象类:被 abstract 关键字修饰的类(class) 被称为抽象类,抽象类通常包含 0 - N 个抽象函数,和 0 - N 个抽象属性,以及 0 - N 个具体函数及属性。

    • 抽象函数:被 abstract 关键字修饰的函数(fun) 被称为抽象函数;抽象函数不能有方法体。

    • 抽象属性:被 abstract 关键字修饰的属性(var|val) 被称为抽象属性;抽象属性没有初始值,也没有 settergetter 访问器。

    注意:抽象函数和抽象属性只能在抽象类中声明,并且无需对抽象类或抽象成员标注 open 注解。

    二、抽象类声明和实现

    kotlin 中使用关键字 abstract 声明抽象类,及抽象成员;并且无需对抽象类或抽象成员标注 open 注解。

    abstract class BaseAbs
    
    abstract class Figure : BaseAbs() { // 1️⃣
        abstract fun onDraw()       // 抽象函数,无函数体 2️⃣
        abstract val name: String   // 抽象属性,无初始值,无getter和setter访问器 3️⃣
    
        val cname: String = "几何图形"  // 具体属性 4️⃣
    
        fun display() = println(name)  // 具体函数 5️⃣
    }
    
    • 代码第1️⃣行声明了抽象类,在类前使用关键字 ** abstract** 修饰,并且不需要使用 open 修饰,默认是 open
    • 代码第2️⃣行声明了抽象函数,在函数前使用关键字 ** abstract** 修饰,并且不需要使用 open 修饰,默认是 open,抽象函数没有函数体。
    • 代码第3️⃣行声明了抽象属性,在属性前使用关键字 ** abstract** 修饰,抽象属性不能设置初始值,并且没有 settergetter访问器。
    • 代码第4️⃣行是具体属性,可以设置初始值,也可以有 settergetter 访问器。
    • 代码第5️⃣行是具体函数,它有函数体。

    注意:如果一个成员函数或属性被声明为抽象的,那么这个类也必须声明为抽象的。而且一个抽象类中,可以有 0 - N 个抽象函数或属性,以及 0 - N 个具体函数或属性。

    // Figure具体实现类
    class Ellipse: Figure() {
    
        override val name: String
            get() = "椭圆形"
    
        override fun onDraw() {
            println("绘制椭圆形...")
        }
    }
    
    class Triangle(override val name: String) : Figure() {
    
        override fun onDraw() {
            println("绘制三角形...")
        }
    }
    
    class Rectangle: Figure() {
    
        override val name: String = "矩形"
    
        override fun onDraw() {
            println("绘制矩形...")
        }
    }
    

    相关文章

      网友评论

          本文标题:Kotlin抽象类与接口 (1)抽象类

          本文链接:https://www.haomeiwen.com/subject/xuxcxctx.html