kotlin类与继承

author author     2022-09-28     347

关键词:

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<String>) {
    //实例化,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中所有的类默认为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")
    }
}


本文出自 “love_programme-love_life” 博客,请务必保留此出处http://codemcx.blog.51cto.com/9638142/1979123

kotlin快速入门:基础语法类与继承集合(代码片段)

参考书籍:《AtomicKotlin》,全英文,读起来慢,但是写得很详细,没有任何语言基础的也能看懂《第一行代码Android第三版》,第二章,有java基础的看一看就会了Kotlin中文文档,很详细,可以当... 查看详情

kotlin快速入门:基础语法类与继承集合(代码片段)

参考书籍:《AtomicKotlin》,全英文,读起来慢,但是写得很详细,没有任何语言基础的也能看懂《第一行代码Android第三版》,第二章,有java基础的看一看就会了Kotlin中文文档,很详细,可以当... 查看详情

kotlin学习——基础巩固,类与继承,lambda,表达式,计算器

一.类与继承我们沿用Java的经典案例,人,男人,女人,首先,我们如果要创建一个类,他为男人,他具有姓名,年龄,身高的属性,我们要创建女人,他也有这些属性,但是他们都... 查看详情

kotlin数据类与密封类(代码片段)

/***主构造函数至少包含一个参数*所有的主构造函数的参数必须标识为val或者var*数据类不可以声明为abstractopen、sealed或者inner*数据类不能继承其他类,但是可以实现接口*///关键字为datadataclassUser(valname:String,valage:Int)//funcopy(name:Str... 查看详情

kotlin学习之类与对象继承与构造函数(代码片段)

类与对象首先创建一个Person类。右击包→New→KotlinFile/Class,在弹出的对话框中输入“Person”。对话框在默认情况下自动选中的是创建一个File,File通常是用于编写Kotlin顶层函数和扩展函数的,我们可以点击展开下拉列... 查看详情

kotlin开发基础(代码片段)

...一时间获取我的最新文章,请关注公众号:技术特工队Kotlin开发基础(一)Kotlin开发基础(二)Kotlin开发基础(三)类本篇文章主要介绍类的继承,接口,复写,单例,以及object属性的介... 查看详情

如何将 Kotlin 内联类与 Android 数据绑定集成?

】如何将Kotlin内联类与Android数据绑定集成?【英文标题】:HowtointegrateKotlininlineclasswithAndroiddatabinding?【发布时间】:2019-06-0523:42:28【问题描述】:Kotlin引入了inlineclass,它是强类型类型别名。这在与数据库一起使用时很有用。例... 查看详情

kotlin数据类与密封类(代码片段)

数据类Kotlin可以创建一个只包含数据的类,关键字为 data:dataclassUser(valname:String,valage:Int)编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:equals() / hashCode()toString() 格式如 "User(name=John,age=42)"co... 查看详情

kotlin学习笔记——基本类型函数lambda类与对象的写法

最近终于要入坑Kotlin啦~这是系列学习笔记的首篇,一起来学习鸭~1.基本类型varage:Int=123//标准语法,声明一个可变变量agevalname:String="Tom"//标准语法,声明一个不可变变量name(不可变变量不是常量)valsex:String?=null//声明一个可为空的... 查看详情

kotlin内部类与嵌套类(代码片段)

kotlin内部类与嵌套类简单的说,kotlin嵌套类相当于java的静态内部类,kotlin内部类相当于java普通内部类。classOutClassvalocval="一个外部类变量值"//嵌套类,相当于Java的静态内部类classNestedClassfuntest1()="嵌套... 查看详情

kotlin内部类与嵌套类(代码片段)

kotlin内部类与嵌套类简单的说,kotlin嵌套类相当于java的静态内部类,kotlin内部类相当于java普通内部类。classOutClassvalocval="一个外部类变量值"//嵌套类,相当于Java的静态内部类classNestedClassfuntest1()="嵌套... 查看详情

类与继承

类的作用:一是当做容器去用;二是调用类产生对象。调用的过程称之为实例化,类是抽象的,对象才是具体存在的,结果称之为对象或实例。继承:继承是一种新建类的方式,新建的类称之为子类,派生类,被继承的类叫做父... 查看详情

我是不是将基类与超类一起继承以进行多重继承?

】我是不是将基类与超类一起继承以进行多重继承?【英文标题】:AmIinhertingbaseclassalongwithsuperclassformultipleinheritance?我是否将基类与超类一起继承以进行多重继承?【发布时间】:2014-08-0202:54:49【问题描述】:因此,我试图围绕... 查看详情

(转)java:类与继承

...,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识。首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐 查看详情

kotlin学习之路:继承(代码片段)

...承二.继承中的构造函数2.1继承中Java的构造函数2.2继承中Kotlin的构造函数2.3Kotlin多个构造函数的情况三.重写和重载3.1方法的重写3.2属性的重写四.super关键字4.1简单用法4.2复杂情况下的用法4.2.1子类重写方法中使用super4.2.2子类选择... 查看详情

将元类与多重继承结合使用的 TypeErrors

】将元类与多重继承结合使用的TypeErrors【英文标题】:TypeErrorsusingmetaclassesinconjunctionwithmultipleinheritance【发布时间】:2011-01-1307:42:18【问题描述】:我有两个关于元类和多重继承的问题。第一个是:为什么我会得到类Derived的TypeE... 查看详情

python基础学习第十五节类与继承(类与继承,这一篇就足够了)(代码片段)

Python基础学习之类与继承1.面向对象名词解释类(Class):用来描述具有相同的属性和方法的对象的集合。类中定义了类对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数,被称为:方法。属性:类中的类变量,我... 查看详情

kotlin继承

Kotlin中所有类都继承该Any类,它是所有类的超类,对于没有超类型声明的类是默认超类:classExample//从Any隐式继承Any默认提供了三个函数:equals()hashCode()toString()注意:Any不是java.lang.Object。如果一个类要被继承,可以使用open关键... 查看详情