kotlin: 抽象类

一,功能

使用 abstract class 可以 定义抽象类 , 抽象类中可以使用 abstract fun 定义抽象方法 , 也可以定义普通的方法 ;

1 . 定义正常的属性和方法 : 抽象类中可以定义正常的 成员属性 和 成员方法 ;

① 正常成员属性 : 该成员属性可以是常量 , 也可以是变量 ;

② 正常成员方法 : 正常的方法 , 定义有方法体 ; 如果函数有方法体 , 不能声明为抽象方法 

抽象属性 : 被 abstract 修饰的 常量 var 或 变量 val 属性 , 没有初始化值 , 没有 getter 和 setter 方法 ;

抽象方法 : 使用 abstract 修饰的方法 , 没有方法体 ; 如果函数有方法体 , 不能声明为抽象方法 ; 如果类中有抽象函数 , 该类必须声明成抽象类 ;

 

二,例子:

代码:

//抽象类
abstract class Person1(val name: String, val age: Int) {
    var height: Int = 40      //非抽象属性
    open var weight: Int = 100      //open属性
    abstract val area:Int     //抽象属性,强制子类重写实现

    abstract fun sayHello()   //抽象方法,无实体,强制子类重写实现
    open fun hello() {        //open方法,子类可以重写,也可继承使用
        println("hello Person,${name}")

    }
    fun hello2() {           //普通方法,子类不可以重写,只能继承
        println("hello Person,${name}")
        println("$name 今年 $age 岁,身高 $height 体重 $weight ,居住面积: $area")
    }
}
//子类
class Student1 : Person1(name = "Tom", age = 18) {
    override var area: Int = 80    //居住面积80平
    override var weight: Int = 110    //体重110公斤
    override fun sayHello() {
        println("$name 今年 $age 岁,身高 $height 体重 $weight ,居住面积: $area")
    }
    override fun hello() {
        println("hello Student,${name}")
    }
}

调用:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            var stu1: Person1 = Student1()
            stu1.sayHello()
            stu1.hello()
            stu1.hello2()
            var stu2: Student1 = Student1()
            stu2.sayHello()
            stu2.hello()
            stu1.hello2()
        }

运行结果:

image

三, 例子:

代码:

abstract class Lanauage{
    val TAG = this.javaClass.simpleName  // 自身的属性

    // 自身的函数
    fun test() : Unit{
        // exp
    }
    abstract var name : String           // 抽象属性
    abstract fun init()                  // 抽象方法
}

/**
 * 抽象类Lanauage的实现类TestAbstarctA
 */
class TestAbstarctA : Lanauage(){

    override var name: String
        get() = "Kotlin"
        set(value) {}

    override fun init() {
        println("我是$name")
    }
}

调用:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            val mTestAbstarctA = TestAbstarctA()
            val mTestAbstarctB = TestAbstarctB()

            println(mTestAbstarctA.name)
            mTestAbstarctA.init()

            println(mTestAbstarctB.name)
            mTestAbstarctB.init()
        }

运行结果:

image

posted @ 2025-09-06 08:39  刘宏缔的架构森林  阅读(9)  评论(0)    收藏  举报