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()
}
运行结果:

三, 例子:
代码:
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()
}
运行结果:

浙公网安备 33010602011771号