kotlin 属性重载

在kotlin中, 不仅可以对方法重载,还可以对属性重载。在java中,在子类中很少重载父类中的属性,虽然这也是可以的。

比如下边的例子:

open class Apple<T>{
    open val info : T?
    constructor(){
        info = null
    }
    constructor(info: T){
        this.info = info
    }
}

class A(info: String): Apple<String>(info){
    override val info: String?                  <<<<<<<<<<
        get() = "child info + " + super.info
}

fun main(){
    var a = A("supper info")
    println(a.info)
}

class A对info进行了重载,但要注意的是在重载时,重写了getter方法,而且没有对info进行初始化。这是因为这种方式的属性重载,实际上是重载了getter方法,在子类中并没有重复声明同名field。这个可以通过多种方式验证,比如查看对应的java代码,或者直接在getter方法中尝试使用field, 编译器会提示子类中该info变量没有对应的backing field。所以针对这种方式的重载就不需要在子类实例初始化重载之后的变量了。

如果写成这样的方式进行重载(官方没有推荐这种做法),那就需要实例化对应的重载属性。

class A(info: String): Apple<String>(info){
    override val info: String? = "child info + " + super.info
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin 语言文档 pdf 目录 概述 4 使用 Kotlin 进行服务器端开发 4 使用 Kotlin 进行 Android 开发 5 Kotlin JavaScript 概述 6 Kotlin 1.1 的新特性 7 开始 15 基本语法 15 习惯用法 20 编码规范 24 基础 26 基本类型 26 包 31 控制流:if、when、for、while 33 返回和跳转 36 类与对象 38 类和继承 38 属性和字段 43 接口 46 可⻅性修饰符 48 扩展 50 数据类 54 密封类 55 泛型 56 嵌套类与内部类 61 枚举类 62 对象表达式和对象声明 64 委托 67 委托属性 68 函数与 Lambda 表达式 73 函数 73 高阶函数和 lambda 表达式 78 内联函数 82 协程 85 其他 89 解构声明 89 集合:List、Set、Map 91 区间 92 2类型的检查与转换“is”与“as” 94 This 表达式 96 相等性 97 操作符重载 98 空安全 102 异常 104 注解 106 反射 110 类型安全的构建器 113 参考 119 关键字与操作符 119 Grammar 123 Notation 123 Semicolons 123 Syntax 123 Lexical structure 130 兼容性 132 Java 互操作 135 在 Kotlin 中调用 Java 代码 135 Java 中调用 Kotlin 142 JavaScript 148 动态类型 148 Kotlin 中调用 JavaScript 150 JavaScript 中调用 Kotlin 153 JavaScript 模块 155 JavaScript 反射 158 JavaScript DCE 159 示例 159 工具 160 编写 Kotlin 代码文档 160 使用 Kotlin 注解处理工具 163 使用 Gradle 165 使用 Maven 170 使用 Ant 175 Kotlin 与 OSGi 178 编译器插件 179 常⻅问题 183 FAQ 183 与 Java 语言比较 186 与 Scala 比较【官方已删除】 187

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值