kotlin学习day2:类

类定义


Kotlin中的类遵循一个简单的结构,如果你需要定义一个类,使用class关键字就可以了.

class User {

    var email: String? = null
    var name: String? = null

}

当然若是一个空类,可以直接省略大括号

class User {

}

构造方法


Kotlin中的构造方法可以分为主要构造方法和二级构造方法,主要构造方法作为类声明的一部分。构造方法的关键字为constructor,如果主要构造方法没有注解或可见度修饰符,此关键字可以省略。和Java中的类一样,每个类都有一个唯一默认的主要构造方法,不带任何参数

class User {

}

在需要的地方,我们可以定义一个对象并使用默认的构造函器去初始化:

var user : User = User()
//user可为null
var user: User? = null

大部分情况下我们只需要使用这个默认的构造方法,当然我们也可以创建带参数的主要构造方法,然后再init中去做我们想做的事情

class User(name: String, emaile: String) {

    var email: String? = null
    var name: String? = null
    var id: Int = 0

    init {
        this.email = email
        this.name = name
    }

}

然后再需要使用的地方直接创建对象

var uset: User = User("LBJFAN", "1057817946@qq.com")

打印结果:

MainActivity: name:LBJFAN:email:1057817946@qq.com

二级构造方法


当主要构造方法无参时,我们可以

    constructor(name:String,email: String){
        this.name = name
        this.email = email
    }

当主要构造方法有参数,则二级构造方法必须调用主要构造方法

class User(name: String) {

    constructor(name: String, email: String):this(name) {
        this.name = name
        this.email = email
    }

类继承


Kotlin中默认任何类都是继承自 Any (与java中的 Object 类似),但是我们可以继
承其它类。所有的类默认都是不可继承的(final),所以我们只能继承那些明确声
明 open 或者 abstract 的类

open class User(name: String)
class Student(name: String, surname: String) : User(name)

如果父类没有主要构造方法,但是有二级构造方法,则子类必须初始化父类的二级构造方法,使用super关键字

open class User {

    constructor(name: String, email: String){
        this.name = name
        this.email = email
    }

}

class Student : User {

    constructor(name: String, email: String) : super(name, email)

}

重写


父类中的方法使用open关键字可以被重写,子类中须使用override关键字,父类中使用final关键字,该方法不能被子类重写

User类中定义方法

    open fun printUserInfo(){

      }

Student类中

  override fun printUserInfo(){

    }

User类中定义方法

 final fun setUserName(){

    }

该方法不能被重写

kotlin是单继承的,但是可以实现多个接口。而且接口中可以有默认的实现方法。在子类中调用父类的方法是,可以直接用super关键字,但如果父类中的方法名一样,则必须志明调用哪个父类的方法,用关键字super<父类名>,如:

 interface A {
        fun printUserInfo() {}
    }

    open class B {
        open fun printUserInfo() {

        }
    }

    class C : B(), A {

        override fun printUserInfo() {
            super<A>.printUserInfo()

        }
    }

抽象类


kotlin中的抽象类也用关键字abstract,如果一个方法定义成了abstract,则这个类也必须是abstract。这时候这个方法没有必要用open关键字,因为这个方法一定是会被子类重写的。

abstract class A {
        abstract fun f()
    }

    class B : A() {
        override fun f() {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值