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

向Kotlin构造函数中的参数添加私有修饰符有什么不同?

向Kotlin构造函数中的参数添加私有修饰符与不添加私有修饰符有以下不同:

  1. 可见性:如果参数没有私有修饰符,它将具有默认的可见性修饰符,即公共可见性。这意味着该参数可以在类的任何地方访问。而如果参数添加了私有修饰符,它将只能在该类内部访问。
  2. 封装性:通过向参数添加私有修饰符,可以增强类的封装性。私有修饰符限制了参数的访问范围,使其只能在类内部使用。这样可以防止参数被外部代码直接访问和修改,提高了代码的安全性和可维护性。
  3. 可变性:如果参数没有私有修饰符,它可以是可变的(var)。这意味着可以在类的任何地方修改参数的值。而如果参数添加了私有修饰符,它将只能是不可变的(val),即只读的。这样可以确保参数的值在构造函数之后不会被修改,增加了代码的稳定性。

总结起来,向Kotlin构造函数中的参数添加私有修饰符可以提高类的封装性和安全性,限制参数的访问范围,确保参数的值不会被意外修改。这在设计和实现类时非常有用,特别是当参数的值对于类的正确性和一致性至关重要时。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin , 可以在 类声明 时 在 类名后...定义 " 主构造函数 " ; 在 主构造函数 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称..., 每个次构造函数都可以不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 在定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数 指定默认值..., 可以不为其传递 值参 , 构造函数跳过该参数 , 其 后面的参数需要使用 参数名 = 参数值 进行赋值 ; 代码示例 : class Hello( // 主构造函数, 直接在主构造函数定义属性

4.8K20

Kotlin入门(14)继承那些事儿

private : 只对自己开放,即私有。 注意到这几个修饰符与open一样都加在类和函数前面,并且都包含“开放”意思,乍看过去还真有点扑朔迷离,到底open跟四个开放性修饰符什么关系?...,再来声明一个它子类试试,例如鸭子是鸟类一种,于是下面有了鸭子类定义代码: //注意父类Bird已经在构造函数声明了属性,故而子类Duck无需重复声明属性 //也就是说,子类构造函数,在输入参数前面不要再加...根据上述抽象类方案,定义好Chicken类代码示例如下: //子类构造函数,原来输入参数不用加var和val,新增输入参数必须加var或者val。...//因为抽象类不能直接使用,所以构造函数不必给默认参数赋值。...类继承与Java相比有所不同,首先Kotlin类默认不可被继承,如需继承则要添加open声明;而Java类默认是允许被继承,只有添加final声明才表示不能被继承。

1.5K50

Kotlin安卓开发学习(2)

这就是Kotlin不同地方,在Kotlin任何一个非抽象类默认都是不可以被继承,相当于Java给类声明了final关键字。...因此,如果我们需要一个类可以被继承,需要在类前添加 修饰符”open“: open class Person { … } 加上open关键字之后,我们就是在主动告诉Kotlin编译器,Person...= 0 } 与Java不同Kotlin中继承需要在继承类后面加上一对括号,为什么需要加上括号,这就涉及了Kotlin构造函数和次构造函数概念。...但是这和那对括号又有什么关系呢?这就涉及了Java继承特性一个规定,子类构造函数必须调用父类构造函数,这个规定在Kotlin也要遵守。...次构造函数也可以用于实例化一个类,这一点和主构造函数没有什么不同,只不过它是函数

36120

kotlin基础语法

.* 函数定义 函数定义使用关键字 fun,参数格式为:参数 : 类型 fun printSum(a: Int,b: Int){ println(a+b) } 无返回值函数 public fun...do { //代码语句 }while(布尔表达式); 返回和跳转 Kotlin 三种结构化跳转表达式: return。默认从最直接包围它函数或者匿名函数 返回。 break。...我们可以像使用普通函数那样使用构造函数创建类实例: val site = Runoob() // Kotlin 没有 new 关键字 要使用一个属性,只要用名称引用它即可 site.name...初始化基类时,可以调用基类不同构造方法。...如果你使用匿名对象作为公有函数 返回类型或者用作公有属性类型,那么该函数或属性实际类型 会是匿名对象声明超类型,如果你没有声明任何超类型,就会是 Any。在匿名对象 添加成员将无法访问。

2.1K20

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

,Java可以通过覆写带不同参数构造函数来实现,那么Kotlin已经在类名后面指明了固定数量入参,又该如何表示拥有其他参数构造函数呢?...“this(context,name)”这句代码在Java要以“super(context,name)”形式写在函数体内部,在Kotlin则以冒号开头补充到输入参数后面,这意味着二级构造函数实际上是从主构造函数派生出来...上面的代码,两个构造函数之间只有一个输入参数区别,所以完全可以把二者合二为一,变成一个带默认参数构造函数,新构造函数既能输入两个参数,又能输入三个参数,新创建一个类AnimalDefault...protected 只对自己和子类开放 private 只对自己开放、即私有 注意到这几个修饰符与open一样都加在类和函数前面,并且都包含“开放”意思,乍看起来还真有点迷,到底open跟这4个开放性修饰符什么关系呢...通过一顿操作之后,总结出Kotlin类继承与Java相比有所不同,主要体现在以下几点: (1)Kotlin类默认不可被继承,若需继承,则要添加open声明,而Java类默认是允许被继承,只有添加

1K20

再谈协程之suspend到底挂起了啥

我们给函数添加了suspend修饰符。...❞ 编译器将使用函数签名额外参数completion(Continuation类型)替换suspend修饰符,该参数将用于将suspend函数结果传达给调用它coroutine。...❝注意:如果你用suspend修饰符标记一个不调用其他suspend函数函数,编译器也会添加额外Continuation参数,但不会对它做任何事情,函数字节码看起来就像一个普通函数。...让我们看看编译器生成了什么。 when语句参数是LoginUserStateMachine实例Label。 每次处理一个新状态时,都会有一个检查,以防这个函数suspend时发生异常。...最后一个状态是不同,因为它必须恢复调用这个函数执行,正如你在代码中看到,它对存储在LoginUserStateMachinecont变量(在构造时)调用resume。

89010

转向Kotlin——类和接口

声明 和Java没有什么两样,Kotlin,类声明也使用class关键字,如果只是声明一个空类,Kotlin和Java没有任何区别,不过定义类其他成员,区别就很大了。...当然,如果类并没有声明主构造器,第二构造器后面可以不调用主构造器。 上面Person类中一共定义了三个构造器,就涉及到了构造重载,也就是一个类拥有不同参数参数类型构造器。...很多变成语言是支持默认参数,也就是在调用函数时候不指定参数值,就会使用默认参数值。...如果不指定修饰符,默认全是public,这些修饰符可以用在普通,也可以用在构造。...小结 Kotlin类e和接口与Java本质上没有什么两样,只不过Kotlin为了体现差异,加入了一些语法糖,如接口允许函数函数体,支持属性,不支持静态方法等。我们需要慢慢去熟悉它。

90030

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

同时,您也将看到Kotlin与Java面向对象编程一些不同特性。...7.2.2 构造函数Kotlin ,一个类可以一个 主构造函数(primary constructor)和一个或多个 次构造函数(secondary constructor)。...如果构造函数注解或可见性修饰符,这个 constructor 关键字是必需,并且这些修饰符在它前面: annotation class MyAutowired class ElementaryStudent...,它会有一个生成不带参数构造函数。...私有构造函数 我们如果希望这个构造函数私有的,我们可以如下声明: class DontCreateMe private constructor() { } 这样我们在代码,就无法直接使用主构造函数来实例化这个类

1.1K20

Kotlin Vocabulary | 数据类

接下来本文将会带您了解数据类其他好处、限制以及其实现内部原理。 用法概览 声明一个数据类,需要使用 data 修饰符并在其构造函数以 val 或 var 参数形式指定其属性。...您可以为数据类构造函数提供默认参数,就像其他函数构造函数一样;您也可以直接访问和修改属性,以及在类定义函数。...构造函数参数 数据类是作为数据持有者被创建。为了强制执行这一角色,您必须至少传入一个参数到它构造函数,而且参数必须是 **val 或 var 属性**。...同样,尝试在主构造函数添加 vararg 参数也会导致编译错误: /* Copyright 2020 Google LLC....) vararg 不被允许是由于 JVM 数组和集合 equals() 实现方法不同

53120

Kotlin与Java互操作

泛型 Kotlin 泛型与 Java 有点不同,读者可以具体参考泛型章节。Kotlin通配符“”代替Java“?”...与Java一样,Kotlin在运行时不保留泛型,也就是对象不携带传递到它们构造类型参数实际类型,即ArrayList()和ArrayList()是不能区分。...如果一个属性幕后字段(Backing Field)、非私有的、没有open/override或者const修饰符,并且不是被委托属性,那么可以使用@JvmField注解该属性。...该注解可以用于构造函数、静态方法,但不能用于抽象方法和在接口中定义方法。..., int b) { } void f(String a) { } 请注意,如次构造函数中所述,如果一个类所有构造函数参数都有默认值,那么会为其生成一个公有的无参构造函数,此时就算没有 @JvmOverloads

3.4K30

Kotlin Vocabulary | 揭秘协程 suspend 修饰符

Kotlin 协程把 suspend 修饰符引入到了我们 Android 开发者日常开发。您是否好奇它底层工作原理呢?编译器是如何转换我们代码,使其能够挂起和恢复协程操作呢?...我们为函数添加了suspend 修饰符,它可以告诉编译器,该函数需要在协程执行。...注意: 如果您使用 suspend 修饰符标记了一个函数,而该函数又没有调用其它挂起函数,那么编译器会添加一个额外 Continuation 参数但是不会用它做任何事,函数字节码则会看起来和一般函数一样...使用不同 Dispatcher 您可以在不同 Dispatcher 间切换,从而做到在不同线程执行计算。那么 Kotlin 是如何知道从哪里开始恢复挂起计算呢?...此时,编译器只需要添加如何在状态之间切换信息。 首先需要知道是: 函数是第一次被调用; 函数已经从前一个状态恢复。

2.2K10

从Flutter范儿单例来看Dart构造函数

单例模式应该是设计模式中使用最广泛一种设计模式了,在Kotlin,甚至为它单独创建了一个语法糖——object类,来快速实现单例模式,而在Dart,并没有像Kotlin这样语法糖,所以,参考单例一般实现...; } } 上面的代码与大部分编程语言代码都差不多,不外乎就是单例几个特点: 私有构造函数 静态instance访问 在Dart,变量和函数前面加上「_」就代表私有,但这个私有实际上含义是...构造函数 构造函数是一个类在初始化时,主动调用函数,在Dart多种不同构造函数,它们在不同场景下使用,可以极大简化我们代码,同时也让我们代码更加具有Flutter范儿。...默认构造函数 缺省构造函数不用自己创建,如果一个类没有构造函数,那么它会自动添加一个,它什么都不做。...// Default Constructor class Test { String name = 'xys'; Test(); } 在构造函数初始化变量 Dart提供了多种不同方式在构造函数未变量赋值

9210

About Kotlin-Kotlin类1About Kotlin(1)

Kotlin类 普通类 class Kotlin没有添加修饰符直接以class开头都是final类。final类意义在于JVM可能存在优化(常量和方法内联)和防止继承滥用。...构造方法 Kotlin中一个类一个primary构造方法和可以多个secondary构造方法。...Effective Java条目2讲述了如何有效地使用构造器模式(Builder Pattern)当Java构造函数很多可选参数时,代码将变得冗长,可读性差且容易出错。...//Kotlin中所有类父类是Any,类似于Object,不过Any不输于java.lang.Object,其三个方法 //这里operator是操作符重载,在Kotlin符号中会说明 public...//在Kotlin,可以使用data关键字 data class User(val name:String,val age:Int) 自动生成函数 编译器会自动从主构造函数根据所有声明属性提取以下函数

1.2K30

Kotlin 开发者角度看 Java 缺失特性

Kotlin 就没有给你这种选择:每个属性和局部变量都需要定义为 val 或 var。另外,不能重新给方法参数赋值。 Java var 关键字完全不同。首先,它只能用于局部变量。...= computeNullableString() 扩展函数 在 Java ,扩展一哥类是通过继承来实现: 继承类两个主要问题。第一个问题是有些类不允许继承:它们使用了 final 修饰符。...为了解决上述问题,Java 开发者发明了辅助类概念,比如 XYZ 类对应辅助类叫作 XYZUtils。辅助类提供了一系列静态方法,并带有私有构造函数,因此不能被实例化。...例如,你可以为你无法修改第三方库类或接口添加函数。这些函数可以按照通常方式进行调用,就好像它们就是原始类方法一样。这种机制叫作扩展函数。 ...,不需要类; Kotlin 标准库已经 capitalize() 函数; 调用扩展函数,就好像它属于 String 类一样。

76820

Kotlin中级(6)- - - Kotlin类之继承.md

请注意,在这种情况下,不同辅助构造函数可以调用基类型不同构造函数 例如: class MyView : View(){ constructor(context: Context) :...存在主构造函数 当存在主构造函数时,主构造函数一般实现基类型参数最多构造函数参数构造函数则用this关键字引用即可 class MyView(context: Context?...: this(context,attrs,0) } 2.3函数重载与重写 在Kotlin关于函数重载与重写和Java几乎是一样,但是这里还是举例说明一下 重写函数量点特殊用法 不管是...Java还是Kotlin,重写基类型里面的方法,则称为重写,或者是覆盖基类型方法 1.当基类函数,没有用到open修饰符修饰时候,实现类中出现函数函数名不能与基类没有用open修饰符修饰函数名相同...// 注意,则`final`修饰符在编辑器是灰色,因为Kotlin默认类默认是final 那么当一个基类去继承另外一个基类时,第二个基类不想去覆盖掉第一个基类方法时,第二个基类该方法使用

58060

【C++】C++ 类 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 构造函数设置默认参数值 | 返回匿名对象与返回引用 )

, 这个增加参数是 对象本身指针 ; 在 Student 类 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...; } 详细代码 , 参考最后完整代码示例 ; 二、构造函数设置默认参数值 ---- 为 Student 类定义了构造函数 , 则其默认无参构造函数 , 就不会生成 ; // 带参构造函数..." << endl; } 此时 , 如果要创建 Student 对象 , 只能调用上述 构造函数 , 如果使用 Student s2 方式调用 默认构造函数 创建 Student 对象 , 就会报错...; 如下带参数构造函数 , 并且为其 构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象名 方式定义对象变量 ; class Student { public: // 带参构造函数...创建 Student 实例对象 Student s(18, 180); // 打印对象情况 s.print(); // 调用构造函数 , 构造函数参数使用默认值 Student s2

17720
领券