从零开始学Kotlin基础篇系列文章

Kotlin中的超类Any

  • Kotlin 中所有类都继承超类 Any 类
   class demo6 //默认继承超类Any
class demo6 : Any()
  • Any类有三个默认的函数
    override fun equals(other: Any?): Boolean {
return super.equals(other)
} override fun hashCode(): Int {
return super.hashCode()
} override fun toString(): String {
return super.toString()
}
  • 如果一个类想被其他类继承,使用open关键字修饰
    open class BaseClass (name:String) {//基类
}
class Demo6: BaseClass("SiberiaDante") {//继承基类
}

类的构造函数的继承

  • 如果子类有主构造函数,则基类必须在主构造函数中立即初始化。
    open class Person(var name : String, var age : Int){// 基类
}
class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age)
  • 如果子类没有主构造函数,则必须在每一个二级构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。
    open class Person(name: String) {
constructor(name: String, age: Int) : this(name)
} class Student : Person {
constructor(name: String) : super(name)//调用基类主构造
constructor(name: String, age: Int) : super(name, age)//调用基类次级构造
}

类中方法的重写

  • 使用fun声明函数时默认为final修饰,不能被子类重写。如果基类允许子类重写该函数,则需要使用 open 关键字修饰, 子类重写方法使用 override 关键词:
    open class Person { //基类
fun man() {//不允许子类重写的方法
print("男人")
}
open fun women() {//允许子类重写方法
print("女人")
}
}
class Gender : Person() {//子类
override fun women() {//重写父类方法
// super.women()
}
}

类中属性的重写

  • 属性的重写必须具有兼容类型,重写使用 override 关键字,每一个声明的属性都可以通过初始化程序或者getter方法被重写
    open class BaseColor() {
open val red: String = "Red"//基类可重写的属性
} class redColor : BaseColor() {
override val red: String="Red1"//重写基类属性
override val red: String//重写基类属性
get() = super.red
}
  • 可以var属性重写val属性,但不能用val属性重写var属性。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
    open class BaseColor() {
open val red: String = "Red"//基类可重写的属性
} class redColor : BaseColor() {
override var red: String="Red1"//重写基类属性
override var red: String//重写基类属性
get() = super.red
}

从零开始学Kotlin-类的继承(6)的更多相关文章

  1. kotlin 类的继承

    与Java不同,kotlin 使用冒号,而Java 中使用extends, 注意冒号后面需要调用夫类的构造器.属于单继承,使用open 关键字允许继承class package loaderman.d ...

  2. 从零开始学Kotlin第六课

    Kotlin调用java代码: 1.如果是内部工程的类,直接调用,如果是外部的工程项目按照java的方式将jar包导入进来. 2.实例化java对象 我们之前学java的时候实例化对象是这个样子的. ...

  3. 从零开始学Kotlin第四课

    面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...

  4. 从零开始学C++之虚继承和虚函数对C++对象内存模型造成的影响

    首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...

  5. Java从零开始学十一(类和对象)

    一.面象对象 二.什么是类 我肯定说,不知道.不清楚. 简单讲类是java中的基本单元,类是具有相同特性和行为的对象集合 三.类的定义 3.1.类的定义 class 类名称{ 数据类型  属性 ; … ...

  6. 从零开始学Kotlin第七课

    1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...

  7. 从零开始学Kotlin第三课

    kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...

  8. 从零开始学Kotlin第一课

    Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...

  9. 从零开始学Kotlin第五课

    函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...

  10. 从零开始学Kotlin第二课

    字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...

随机推荐

  1. Flume学习之路 (一)Flume的基础介绍

    一.背景 Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步. 许多公司的平台每天会产生大量的日志 ...

  2. Java学习笔记--Java开发坏境搭建

    一.安装JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据自己系统选择 ...

  3. C# 自定义类型转换

    1.显式转换和隐式转换: ; long b=a; // 从int到long的隐式转换 int c=(int) b; // 从long到int是显式转换 ------------------------ ...

  4. Oracle 函数function之返回结果集

    工作中常需要经过一段复杂逻辑处理后,得出的一个结果集.并能够将这个结果集作为一个表看待,去进行关联查询 我一般采用建立函数function的方式来处理. --创建包,声明function和typeCR ...

  5. odoo自动更新表中数据

    这是追踪信息用的查询语句,__init__方法初始化作用 _order = ctx = dict(context or {}, mail_create_nolog=True) new_id = sup ...

  6. MapReduce -- 最短路径

    示例: 给出各个节点到相邻节点的距离,要求算出初始节点到各个节点的最短路径. 数据: A (B,) (D,) B (C,) (D,) C (E,) D (B,) (C,) (E,) E (A,) (C ...

  7. mssql sqlserver 保留小数位指定位数的2种方法分享

    摘要: 下文讲述将"sql数值型"类型数值转换为指定小数位的数据 方法1:采用 cast 方式转换数值类型至指定小数位: ,) set @a = 18.893 ,) 方法2:采用 ...

  8. 20155207 《网络对抗技术》EXP3 免杀原理与实践

    20155207 <网络对抗技术>EXP3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? - 根据特征码进行检测(静态) - 启发式(模糊特征点.行为 ) - 根据行为进行检 ...

  9. 20155317王新玮《网络对抗技术》实验8 WEB基础实践

    20155317王新玮<网络对抗技术>实验8 WEB基础实践 一.实验准备 1.0 实验目标和内容 Web前端HTML.能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  10. switch语句的执行过程

    switch语句的执行规则如下: 1.从第一个case开始判断,不匹配则跳到下一个case继续判断: 2.遇到break则跳出switch语句: 3.default一般是没有匹配项才执行的,一般是放在 ...