Kotlin中的类、继承、主次构造函数和面向接口的编程

类与对象

类:就是具有相似的属性和相同行为的对象的抽象。

  • Kotlin中定义的类默认是不可继承的(相当于Java中的final类)。
    例如,我们可以使用下面的代码定义一个类,以及声明它所拥有的字段和函数:
class Person {  //定义一个类
    val name = ""
    val age = 0
    fun eat() {
        println(name + " is eating. He is " + age + " years old.")
    }
}
fun main() {
    val p = Person()  //实例化一个对象
    p.name = "Jack"
    p.age = 19
    p.eat()
}
注:1.val p = Person(),这里的p是val类型的,只能指向当前这个Person,即**p所引用的对象不可变**;
2.类中所有的变量都要被初始化,除非它是一个抽象类。
  • 如果想要让一个类可以被继承,需要用open关键字去主动声明,例如:
open class Person {
   '''
}
  • 如果我们要让另一个类去继承Person类,那么就需要使用冒号关键字,而且要保证两者在逻辑上有is-a的关系。例如,让Student类去继承Person类:
class Student : Person() {
    var sno = ""
    var grade = 0
}
从上述代码中,我们可以发现,Student类中不光自动拥有了从Person类中继承的字段和函数,同时又定义了自己独有的字段和函数(sno、grade)。

构造函数

  • 主构造函数:
    1.每个类默认有一个不带参数的主构造函数
    2.显示定义,无函数体,直接定义在类名的后面(但要指明参数)
class Student : Person() {  //默认主构造函数
    var sno = ""
    var grade = 0
}

class Student(val sno:String, val grade:Int) : Person() {
}  //显示定义无函数体的主构造函数

class Student(val sno:String, val grade:Int) : Person() {
     init{
         println(“sno is+sno)
         println(“grade is+grade)
     }
}  //主构造函数的逻辑可以写在init结构里
  • 次构造函数
    1.使用constructor关键字定义,有函数体
    2.次构造函数必须调用主构造函数(包括间接调用)
class Student(val sno:String, val grade:Int, name:String, age:Int) : Person(name,age) {
    constructor(name:String,age:Int) : this(“”,0,name,age){ }
    constructor() : this(“”,0)
}  //类里同时有主构造函数和次构造函数

class Student : Person {
    constructor(name:String,age:Int) : super(name,age){ }
}  //类里只有次构造函数(少见)

注:次构造函数一定要调用主构造函数(this),没有主构造函数,要调用父类构造函数(super)

  • 接口
    Kotlin中定义接口的关键字和Java中是相同的,都是使用的interface,调用接口时使用override重定义,改变其body。例如:
interface Study {  
    fun readBooks()
    fun doHomework()
}  //定义接口

class Student(val name: String, val age: Int) : Person(name,age),Study {
    override fun readBooks() {
        println(name + " is reading.")
    }

    override fun doHomework() {
        println(name + " is doing homework.")
    }
}  //调用接口:接口里的方法都要被实现

面向接口的编程:我们可以把接口封装在一个函数里,使用的时候直接调用该函数就行。相关内容如下:

fun doStudy(s:Study){
    s.readBooks()
        s.doHomework()
}
fun main(){
    val student = Student(“Jack",20)   
    //student.readBooks()    
    //student.doHomework()    
    doStudy(student)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值