Kotlin类与继承-创新互联-成都快上网建站

Kotlin类与继承-创新互联

施甸网站建设公司创新互联,施甸网站设计制作,有大型网站制作公司丰富经验。已为施甸上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的施甸做网站的公司定做!

Kotlin使用class关键字声明类,类声明由类名、类头(指定其类型参数、主 构造函数等)和由大括号包围的类体组成。

类头和类体都是可选的,如果一个类没有类体大括号可省略

class NoBody

类的构造函数

一类可以有一个主构造函数和一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(和可选的类型参数)后

主构造函数不能包含任何代码块,可用init块初始化代码,并且可访问主构造函数的参数

class Person constructor(firstName: String) {
    init {
        println(firstName)
    }
}

如果类头没有任何注解或者可见性修饰符,constructor关键字可省略

class Person2(firstName: String) {
    init {
        println(firstName)
    }
}

如果构造函数有注解或可见性修饰符,这个constructor关键字是必需的,并且这些修饰符在它前面

class Person3 public constructor(firstName: String) {
    init {
        println(firstName)
    }
}

次构造函数

类也可以声明次构造函数

class Animal {
    constructor(name: String) {
        println(name)
    }
}

如果一个类有主构造函数,每个次构造函数都需要委托给主构造函数,可以直接委托或者通过其它次构造函数间接委托

使用this关键字直接委托给当前类的主构造函数

class Animal2(name: String) {
    constructor(name: String, age: Int) : this(name) {
        println(name + age)
    }

    init {
        println(name)
    }
}

如果一非抽象类没有任何主或者次构造函数,它会默认生成一个不带参的主构造函数

class Animal3 {}

等同于

class Animal3(){}

将构造函数用private修饰可以防止被创建类的实例

class DontCreate private constructor() {}

创建类的实例

类定义后,需要创建实例才能使用

fun main(args: Array) {
    //实例化,Kotlin类的实例化省去了new关键字
    var person = Person("zhangsna")
    var person1 = Animal3()

    println(person)
    println(person1)

    //private修饰符修饰的构造方法不能实例化
    //var dontCreate = DontCreate()
}

继承

Kotlin和Java一样都有隐式继承,Java中一个类如果没有显示的继承一个类默认继承Object

而Kotlin中默认继承Any

class Example  //隐式继承Any

Any中只有 equals()、hashCode()和toString()三个方法。附Any类源码图

Kotlin类与继承

在Kotlin中所有的类默认为final类型,是不能够被继承的。如果该类需要被继承则必须加上open关键字否则该类编译成class后是一个final类

open class Base {
}

使用:符号实现继承,继承的父类必须初始化

class Car : Base() {
}

如果父类主构造函数有参数子类必须声明一个有参数的主构造函数初始化父类的构造函数

open class Device(name: String) {
    init {
        println(name)
    }
}

class Phone(name: String) : Device(name) {
}

如果父类没有主构造函数,那么子类每个次构造函数都必须使用super关键字调初始化父类次构造函数

open class Device2 {
    constructor(name: String) {
        println(name)
    }

    constructor(type: Int, weight: Int) {
        println("$type" + weight)
    }
}

class Computor : Device2 {
    constructor(name: String) : super(name)
    constructor(type: Int, weight: Int) : super(type, weight)
}

覆盖方法和属性

Kotlin中需要overried关键字显示的覆盖成员

open class Father {
    open var a: Int = 1
    open fun say() {
        println("father say")
    }
}

class Son : Father() {
    //必须加上overried关键字,覆盖父类成员
    override var a: Int = 2

    override fun say() {
        println("son say")
    }
}

抽象类和继承

使用abstract关键字定义抽象类

abstract class Abstract {
    //定义抽象方法时,必能有方法体
    abstract fun absFun()
}
class Sub : Abstract() {
    //子类必须实现父类的抽象方法
    override fun absFun() {
        println("absFun of sub")
    }
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:Kotlin类与继承-创新互联
文章分享:http://kswjz.com/article/dssosc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流