首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

语法基础(三十七)-修饰符总结

C#的访问修饰符 修饰符 含义 private 只能在当前类中访问 public 同一程序集(DLL或EXE)中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。...只能实例化 类的声明修饰符 abstract 使用abstract修饰的类为抽象类,抽象类只能是其他类的基类,不能与sealed、static一起使用。...sealed 使用sealed修饰的类为密封类,密封类无法被继承,不能和abstract、static一起使用。 当sealed用于方法或属性时,必须始终与override一起使用。...static 使用static修饰的类为静态类,静态类所有成员都必须是静态的,不能与abstract、sealed一起使用。...默认情况下,方法是非虚拟的。 不能重写非虚方法。 virtual修饰符不能与static、abstract、private或override修饰符一起使用。

47620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin | 4.类、对象和接口

    * Java 的类和方法默认是open的,而 Kotlin 中默认都是final的。 * 如果你想允许创建一个类的子类,需要使用 open 修饰符来标识这个类。...*/ // Kotlin 中,内部类的默认行为与我们刚刚描述的是相反的 // 代码清单4.11 在Kotlin中使用嵌套类实现View // class Button4...使用 inner 关键字来存储外部类的引用。 sealed 类的子类只能嵌套在自身的声明中(Kotlin 1.1 允许将子类放置在同一文件的任意地方)。...对象声明是Kotlin 中定义单例类的方法。...伴生对象(与包级别函数和属性 起)替代了 Java 静态方法和字段定义 伴生对象与其他对象一样,可以实现接口,也可以拥有有扩展函数和属性 对象表达式是 Kotlin 中针对 Java 匿名内部类的替代品

    96210

    Kotlin|这些隐藏的内存陷阱,你应该熟记于心

    导航 学完本篇,你将了解到以下内容: 密封类构造函数传值的使用细节; 内联函数,你应该注意的地方; 伴生对象隐藏的性能问题; lazy ,可能没你想的那么简单; apply !...摘自Kotlin中文文档 关于它用法,我们具体不再做赘述。 密封类虽然非常实用,经常能成为我们多type的绝佳搭配,但其中却藏着一些使用的小细节,比如 构造函数传值所导致的损耗问题。...推荐示例 我们在文章最开始提到了,Kotlin inline ,一般建议用于 高阶函数(lambda) 中。为什么呢?...总结 本篇中,我们以日常开发的视角,去探寻了 Kotlin 中那些 [隐藏] 的内存陷阱。 仔细回想,上述的不恰当用法都是建立在 [不熟练] 的背景下。...Kotlin 本身的各种便利没有任何问题,其使得我们的 代码可读性 与 开发舒适度 增强了太多。但如果同时,我们还能注意到其背后的实现,也是不是就能在 性能与优雅 之间找到了一种平衡。

    82330

    Kotlin入门(15)独门秘笈之特殊类

    上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类。...,也就是把内部类作为外部类的一个成员对象来使用,这与成员属性、成员方法的调用方法类似。...因此,Kotlin摒弃了“枚举类型”那种模糊不清的说法,转而采取“枚举类”这种正本清源的提法。具体到编码上,则将enum作为关键字class的修饰符,使之名正言顺地成为一个类——枚举类。...为解决枚举值判断的多余分支问题,Kotlin提出了“密封类”的概念,密封类就像是一种更加严格的枚举类,它内部有且仅有自身的实例对象,所以是一个有限的自身实例集合。...定义密封类时使用关键字sealed标记,具体的密封类定义代码如下所示: sealed class SeasonSealed { //密封类内部的每个嵌套类都必须继承该类 class Spring

    1.3K30

    【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )

    密封类与枚举类 : ① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类类似 , 枚举类的值的集合是受限制的 , 不能随意扩展 ; ② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比...密封类声明 ---- 1 . 密封类声明 : 在 class 前添加 sealed 修饰符 , 即可将该类声明为密封类 ; sealed class Student{} 2 ....子类声明 : 密封类的子类 , 必须定义在密封类的内部 ; ( 1.1 之后的版本可以定义在同一个文件中 ) sealed class Student { class GoodStudent...密封类子类 : ① 定义在密封类内部 ( 推荐 ) : 密封类的子类建议定义在密封类内部 , 可以兼容所有版本 ; ② 定义在密封类所在文件 : Kotlin 1.1 以后的版本 , 可以将密封类子类定义在密封类声明的同一个文件中..., 如果 when 中列举了所有的密封类子类 , 此时可以不写 else 分支 , 详情看下面的示例代码 ; IV .

    1.4K10

    kotlin基础--对象、接口、抽象类

    上次介绍了kotlin的类定义与初始化,接下来学习对象、接口、抽象类 一、对象 1.object关键字 object,类似Java中的静态 三种使用方式: 1.1 对象声明 对应Java中的单例类,只会在内存中实例化一次...如果你想要某个对象和一个类实例化绑定在一起,可以考虑伴生对象,使用 companion object 可以在一个类里定义一个伴生对象,一个类只能有一个伴生对象, 伴生对象也是静态的,只会在类实例化或调用伴生对象中的内容...5.解构声明 前面我们已经使用过解构语法了,如果想要在自己定义的类中使用,需要operate关键字, 并声明component1、component2...组件函数,函数名不能擅自改动 class...7.运算符重载 之前使用集合是我们可以直接使用 "+" 、"-" 等来添加和删除元素 和c++一样,kotlin也支持运算符重载,只需要重载下面的函数就可以实现了: 8.枚举类 用来定义常量集合的一种特殊类...对于更复杂的ADT,可以使用密封类,使用sealed修饰类,来实现更加复杂的定义,密封类可以更灵活的控制某个子类型 子类型必须和它定义在同一个文件里 sealed class Position {

    43110

    Kotlin学习日志(五)类与对象

    3.1 开放性修饰符 之前我们写了好多个WildAnimal类,Java和Kotlin关于类的继承还有区别,比如Java中默认每个类都能被继承,除非加了final关键字,而Kotlin刚好相反,它默认每个类都不能被继承...那么在Kotlin中也给出了4个开放性修饰符。 开放性修饰符 说明 public 对所有人开放。...其实很简单,open不控制某个对象的访问权限,只决定该对象能否繁衍开来,说白了,就是公告这个叼毛有没有资格繁衍下一代,只有头戴open帽子的类,才允许作为基类派生出子类来,而头戴open帽子的函数,表示它允许在子类中进行重写...至于那4个开放性修饰符,则是用来限定允许访问某对象的外部范围,通俗地说,就是哪里的帅哥可以跟这个美女搞对象,头戴public的,表示全世界的帅哥都能跟她处对象,头戴internal的,表示只有本国的帅哥可以...提出了“密封类”得概念,密封类就像是一种更加严格的枚举类,它内部有且仅有自身的实例对象,所以是一个有限的自身实例集合,或者说,密封类采用了嵌套类的手段,它的嵌套类全部由自身派生而来,定义密封类的时候,需要在该类的

    1.2K20

    Android面试题之Kotlin的几种常见的类

    by lazy初始化操作是线程安全的 初始化注意点 使用初始化块时,顺序非常重要,必须确保块中的所有属性已经完成初始化 初始化块中的函数里所用到得属性,也要确保已经初始化完成 类里面的属性按从上往下顺序初始化...,在调用方法函数时,一定要确保属性已经初始化完成 继承 默认不可继承,如果要开放,需要open关键字 可以被覆写的方法也要open关键字修饰 用 is 来判断类型,用as来手动转换类型,并且kotlin...数据类使用条件 经常需要比较、复制或打印自身内容的类,数据类尤其适合 数据类必须有至少带一个参数的主构造函数 主构造函数的参数必须是val或是var 数据类不能使用abstract open sealed...object关键字可以定义单例类 object关键字有三种使用方式 对象声明,生成单例 对象表达式,就类似匿名内部类,new onClickListener 伴生对象,类似静态方法或是静态属性 枚举类...密封类可以用来定义一个类似枚举类的代数数据类型,但你可以更灵活地控制某个子类型 密封类可以有若干个子类,要继承密封类,这些子类必须和它定义在同一个文件里 sealed class LicenseStatus

    8610

    《Kotin 极简教程》第7章 面向对象编程(OOP)(2)《Kotlin极简教程》正式上架:

    密封类 7.10.1 为什么使用密封类 就像我们为什么要用enum类型一样,比如你有一个enum类型 MoneyUnit,定义了元、角、分这些单位。...7.10.1 声明密封类 要声明一个密封类,需要在类名前面添加 sealed 修饰符。...面向对象编程的特性: 类与构造函数、抽象类与接口、继承以及多重继承等基础知识,同时介绍了Kotlin中的注解类、枚举类、数据类、密封类、嵌套类、内部类、匿名内部类等特性类。...总的来说,Kotlin相比于Java的面向对象编程,增加不少有趣的功能与特性支持,这使得我们代码写起来更加方便快捷了。...下一章中,我们来一起学习Kotlin的函数式编程。 本章示例代码工程: https://github.com/EasyKotlin/chatper7_oop

    1.6K20

    面试官:为什么Vue中的v-if和v-for不建议一起用?

    这块内容只会在指令的表达式返回 true值的时候被渲染 v-for 指令基于一个数组来渲染一个列表。...v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组或者对象,而 item 则是被迭代的数组元素的别名 在 v-for 的时候,建议设置key值,并且保证每个...{{ item.label }} 二、优先级 v-if与v-for都是vue模板系统中的指令 在vue模板编译的时候,会将指令系统转化成可执行的render函数 示例 编写一个p标签,同时使用...render函数中,通过app....v-if高 三、注意事项 永远不要把 v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断) 如果避免出现这种情况,则在外层嵌套template(页面渲染不生成

    95920

    抽象类及接口详解

    一、前言   在上一节中我们讲到抽象类和接口之间的异同,我们一起回顾下其异同。   ...我们一起看看到底为什么要使用吧 为什么使用抽象类?   抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象`。...这样来说如果一个类设计就是为了给其他类继承的,它代表一类对象所具有的公共属性或方法,我们就使用抽象类。就像上门的这个例子,把一些动物共同的属性或者方法提取出来,定义一个抽象类。...抽象类关键字--abstract   接口关键字--interface 四、扩展延伸(密封类)   讲到抽象类,我们也可以一起看看密封类,密封类不能作为基类,禁止派生。...2、在使用密封类(sealed)的时候,密封类将限制它的使用,现在及未来都将受到影响     3、如果实例方法包含了sealed修饰符,那么它也必须包含override修饰符,其父类方法必须包含virtual

    60220

    Kotlin学习笔记(四)-面向对象

    的方法,同时不实现会执行by后面对象里的方法 interface中的抽象方法可以有默认实现。...他是一个抽象的无实现方法 不止可以重写方法方法,还可以重写属性 内部重写是优先级高于外部传入的 可见性修饰符 Kotlin Java private private protected↑ protected...} 伴生对象与静态成员 kotlin 中时没有static 这种方法修饰的静态方法 所以要实现 类似于java中的静态属性就要用到伴生对象 例子: fun main(args: Arraykotlin中默认是使用静态static内部类的 println(this@Outter.a)//当内外部类重载相同的属性或方法时 通过this...枚举类中定义方法,那么要在枚举对象最后加上; 这基本是Kotlin中唯一一个需要强制写;的地方 密封类 密封类与枚举的区别:前者是子类可数,后者是实例可数 密封类(Sealed Class)的子类必须和父类定义在同一个文件中

    85510

    abstract virtaul override new 及多态

    abstract  abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。...在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。...virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。 除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。...在静态属性上使用 virtual 修饰符是错误的。 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。...如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。 可以从派生类中使用 base 关键字调用基类方法。

    78630

    Kotlin 1.4.30-M1 增强的内联类是个什么东西?

    总结一下,内联函数可以减少函数对象的创建和函数调用的次数。 提问:所以你知道为什么 IDE 会对 max 这样的非高阶函数的内联发出警告了吗? 2....内联类的语法其实也简单,与 Kotlin 当中其他的枚举类、密封类、数据类的定义方式类似,在 class 前面加一个 inline 即可: inline class PlayerState(val value...这样看来,如果父类当中足够简单,不包含状态,是不是将来有希望支持继承呢? 其实问题不只是状态那么简单,还有多态引发的装箱和拆箱的问题。...简单总结如下: 内联类是对其他类实例的包装 内联类在编译时会尽可能地将实例替换成被包装的对象 内联类的函数(包括无状态属性)都将被编译成静态函数 内联类在内存敏感的场景下可以一定程度上替代枚举类、密封类的使用...内联类不能与 Java 兼容

    57530

    Dart 3.0 语法新特性 | 类型修饰符 Class modifiers

    theme: cyanosis 在 dart 3.0.0 之后,对类型的修饰符进行了拓展,现在类型的修饰符有: 名称 作用 mixin 混入类修饰符 sealed 密封可枚举的子类型 abstract...在新语法中只有 常规类 才允许使用 extends 或 with 子句,混入类不允许使用; 只有 混入类 才允许使用 on 子句,常规类不允许使用。...密封类的支持 sealed 有些类型的子类型集是已知的,可枚举的;比如登陆界面的认证状态 AuthState,有如下三种子状态 认证中 AuthLoading 认证成功 AuthSuccess 认证失败...AuthFailure 这时就可以通过密封类来处理,下面的代码看起来似乎和平台的继承也没什么区别,但密封类有它的特点。...类型修饰符的增加,可以让类本身多了一些特点,也可以控制类的派生能力,这对于构建大型应用来说是友好的。Kotlin 一直都有 sealed 密封类,这是让我垂涎的语法特性,现在 Dart 终于支持了。

    98021

    nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

    不是预期的 “abc cba” 和 “efg gfe” 2. nextLine 使用举例: 输入 1: 2 abc cba 结果 1: str[0] = “” str[1] = “abc” 原因:以回车...回车符 “\r” 它被丢弃在缓冲区中,现在缓冲区中,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列的函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 的时候会碰到读取空字符串的情况 解决方案:输入都用...实际测试,BufferReader 至少比 Scanner 输入快两倍 用 Scanner 是为了循环输入的功能,也就是 hasNext() 方法的功能 今天忽然想到了可以用死循环来代替,所以,还是继续使用

    2.7K10
    领券