Kotlin笔记 八(三) final修饰符.md

final与open修饰符

final:可以修饰类、方法、属性,表示类不能被继承、方法不能被重写、属性不能被重写

Kotlin默认为非抽象类、非抽象属性、非抽象方法自动添加final修饰,如果类要被继承,方法、属性可以被重写,需要在手动使用open修饰符;

final修饰符不能修饰局部变量,这点和Java有所区别;

1.1 可执行宏替换的常量

kotlin中的宏变量不是使用final关键字而是const,java中是final修饰;

宏变量就是在编译阶段就会本替换掉;

Kotlin提供了const关键字来修饰可执行宏替换的常量;

宏替换常量除了使用const修饰外,还必须满足:

  1. 位于顶层或者是对象表达式的成员

  2. 初始值为基本数据类型(java的8中基本数据类型)或字符串字面值

  3. 没有之定义的getter方法

    const val Max_AGE=100

    fun main(args:Array){

     println(Max_AGE)
    

    }

常量Max_AGE根本不存在,当程序执行到println()时,实际替换为执行println(100),这个操作在编译阶段就完成了,运行阶段是没有Max_AGE这个常量的;

被赋值的表达式:如果只是基本算术表达式或者字符串连接运算,没有访问普通变量、常量、调用方法,Kotlin同样会将这种const常量当成宏变量处理;

如:

const val a1=5+2;

const val b:Double=1.2/3

const val str="leslie"+99

const val book="lelsie"+a1//因为表达式中使用了另外一个常量,所以在编译时无法确定下来,所以不是宏变量

1.2 final属性

kotlin为属性自动添加final修饰,如果要重写属性,必须手动添加open修饰符

private修饰的属性,是不能被重写的,该属性只在当前类可见;

1.3 final方法

默认所有类中非抽象都自动使用final修饰,所以是不能被重子类重写的,如果要重写必须手动添加open修饰;

注意:

  1. 只要有private修饰的方法,该类只在当前类中可见,对子类时不可见的,子类是无法重写的,即使子类中一个相同方法名、相同形参列表、相同返回值类型的方法,也不是重写,而只是重新定义了一个新方法;

1.4 final类

kotlin会自动为类添加一个final修饰符,如果想类可以被继承,必须手动添加open修饰符;

不可变类

不可变类:创建该类实例,该实例的属性值是不可改变的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值