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

如果我不想在Kotlin中调用基类的构造函数,我应该怎么做?

在Kotlin中,如果你不想调用基类的构造函数,可以使用open关键字来声明基类,并在子类的构造函数中使用super关键字来调用基类的构造函数。如果你不想调用基类的构造函数,可以在子类的构造函数中省略super关键字。

以下是一个示例代码:

代码语言:txt
复制
open class BaseClass(val name: String) {
    init {
        println("BaseClass init")
    }
}

class SubClass : BaseClass {
    constructor(name: String) : super(name) {
        println("SubClass init")
    }
}

fun main() {
    val obj = SubClass("example")
}

在上面的代码中,BaseClass是基类,SubClass是子类。子类的构造函数中使用super(name)来调用基类的构造函数。如果你不想调用基类的构造函数,可以直接省略super(name)

这样,当你创建SubClass对象时,会先调用基类的构造函数,然后再调用子类的构造函数。如果你省略了super(name),则只会调用子类的构造函数。

这种方式适用于当你需要在子类中自定义构造函数逻辑,而不需要调用基类的构造函数时。

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

相关·内容

解毒 Kotlin Koans: 03 函数参数、重载

具名参数与默认参数关系 下面来讲讲这两者中间情”。 现在,想要调用 foo 这个函数,number 默认 42,而 toUpperCase 这个参数需要传入 true,咋办?...Java 视角看 Kotlin 默认参数 Java 是没有默认参数,那么在 Java 要怎样调用 Kotlin 中使用了默认参数定义函数或者方法呢?...: class MyArrayList(): ArrayList(){ ... } 那么问题来了,如果想在 Kotlin 当中写出下面的代码: val myIntList =...Kotlin 如果有主构造器,那么其他构造器必须调用构造器,但如果没有主构造器,就不需要这么费事儿了。...本期问题 又到了本期问题时间,结合本文对默认参数和方法重载讨论,以及前面给出 RelativeLayout 例子,思考下面问题: 在有主构造前提下,Kotlin 为什么要求一个所有构造器都最终要调用自己构造

89420

Kotlin Android】一个列表带你领略Kotlin简洁之风

对于Kotlin一开始也是没有多大兴趣,对函数式编程也是有一定排斥,总感觉代码可读性和可维护性似乎大大下降,事实上只是对这编程思想没有一个很好转变而已。...Kotlin 声明、定义、继承 Kotlin同样使用class来声明继承符号为一个冒号“:”,需要在名后面带上一对括号,如果构造函数带有参数,此时需要在括号填写对应参数。...fun fun1() { ... } ... } 如果类没有具体内部变量和方法,那么也可定义为一个空,不需要名后面的体 [类属性] class A Kotlin默认带有一个无参数构造函数...,默认可以省略写,如果构造函数带有参数,那么可你直接写在默认构造函数上,或者另外写一个二级构造函数 class A(var arg1: Int, val arg2: String) 或 class...Base为open属性,并且构造函数需要一个Int类型参数 2,Base中有一个init初始化代码块,可以在里面直接使用构造函数参数来完成数据初始化 3,子类必须在默认构造方法初始化参数

1.8K10
  • Kotlin 创建接口或者抽象匿名对象实例

    继承、派生、接口、构造方式,方法、属性重写 前言 kotlin 作为google官方android 开发语言,大势所趋,据传到2018底kotlin要全面替代java在android地位,其实这个也担心毕竟...Kotlin 继承 1.使用 open 关键字进行修饰 2.主构造函数紧跟着在后面声明函数 open class Person(var name : String, var age : Int){/...(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) { } } 另一种写法,构造函数,次级构造函数 /**用户**/ open class...fun函数默认 final 修饰符,无法在子类进行重写 需要加上 open 修饰符号 方法获得,同名方法获得 一个从其他或者接口(继承实现来方法),同名方法,在子类必须显示进行调用 open...因为 C 是一个实现了 A 具体,所以必须要重写 bar() 并实现这个抽象方法。 然而,如果我们从 A 和 B 派生 D,我们需要实现多个接口继承所有方法,并指明 D 应该如何实现它们。

    3K41

    Kotlin面向对象编程,深入讨论继承写法问题

    那或许有的朋友可能会问了,主构造函数没有函数体,如果想在构造函数编写一些逻辑该怎么办呢?...到这里为止都还挺好理解吧,但是这和那对括号又有什么关系呢?这就牵扯到了Java继承特性一个规定,子类构造函数必须得调用构造函数,这个规定在Kotlin也要遵守。...Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解设计方式:括号。子类构造函数调用哪个构造函数,通过在父后面加上括号来指定。...Kotlin规定,当一个既有主构造函数又有次构造函数时,所有的次构造函数都必须得调用构造函数(包括间接调用),这里通过一个具体例子就能简单阐明清楚了,代码如下: class Student(val...第二个次构造函数接收任何参数,它通过this关键字调用了我们刚才定义第一个次构造函数,并将name和age参数也赋值成初始值,由于第二个次构造函数间接调用了主构造函数,因此这仍然是合法

    84830

    Kotlin实体创建方式

    = '1' } 补充知识:Kotlin构造器、对象 1.Kotlin定义 构成: 构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套)、对象声明五部分组成 /.../Kotlin创建对象无new关键字 } 3.创建构造Kotlin当没有创建构造器时,与Java类似的是,与Java类似的就是当没有显示提供主函数时,Kotlin会为其生成一个无参构造。.../** * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数 * 主构造函数一部分,跟在名后面 * 在Java构造方法必须和名相同,而在Kotlin...val age: Int){} //次构造函数,与主构造函数区别就是,次构造函数定义在,可以有多个,但是主构造函数只会有一个 class Users{ private val username...用来创建,封装常用方法,以及处理一些共有的逻辑,而这个所谓一般都是抽象

    4.1K10

    Kotlin学习日志(五)与对象

    由此看来,二级构造函数从属于主构造函数如果使用二级构造函数声明该类实例,系统就会先调用构造函数init代码,再调用二级构造函数自身代码,现在若想声明AnimalMain实例,既可通过主构造函数...,但如果Kotlin呢,代码冗余了, (1)属性字段跟构造函数入参,二者名称一样,变量类型也一样。...其实很简单,open控制某个对象访问权限,只决定该对象能否繁衍开来,说白了,就是公告这个叼毛有没有资格繁衍下一代,只有头戴open帽子,才允许作为派生出子类来,而头戴open帽子函数,表示它允许在子类中进行重写...枚举变量本质上还是该类一个实例,所以如果枚举存在构造函数,枚举变量也必须调用对应构造函数,这样做好处是,每一个枚举值不但携带唯一名称,还可以拥有更加个性化特征描述。...在Android实际开发,我们经常需要定义一些实体来存放返回数据,在Java中一个数据通常完成以下工作: (1)定义实体每个字段,以及对字段进行初始赋值构造函数

    1.1K20

    Kotlin 漫谈系列之类与继承

    ,我们 Kotlin 程序员也可以 new 就有对象了?。 Kotlin 构造函数分为主构造函数和次构造函数。主构造函数是和名称一起写在头部,次构造函数是写在体里面的。...不过在定义主构造函数时,如果没有注解什么,就可以写了,所以看起来还是很?。...构造函数必须直接或间接(通过其他次构造函数)委托给主构造函数,委托到同一个另一个构造函数用 this 关键字,你们应该也有这个限制吧。...构造函数可见性是 public。如果希望你 有一个公有构造函数,你需要声明一个带有非默认可见性构造函数。...没有 NSObject 概念 构造函数(初始化器) 构造函数也可以叫做初始化器(Initializer) 用 init 关键字来定义构造函数 class SomeClass { init

    3.7K40

    【C++】继承

    所以什么时候可以把成员定义成私有啊,除了想在外被访问到: ,是不是如果当前某些成员不想被子类使用和访问,也可以把它定义成私有啊。...而我们Student里面只定义了一个成员变量_num,其它啥也没写。 但我们看到s自动去调用了它父构造和析构。 那如果子类对象自己显示实现构造函数呢?...所以,我们要这样写 所以,这里我们就可以认为必须分开处理,子类构造函数即使我们写,默认生成构造函数在初始化从父继承下来成员时也会自动去调父构造函数如果我们自己实现了子类构造函数...,那要求我们必须调用构造函数初始化那一部分成员。...如果没有默认构造函数,则必须在派生构造函数初始化列表阶段显示调用。 那其实这里感觉就有点像子类里面有一个父自定义类型成员一样。

    13610

    【Android】只给个泛型,如何自动初始化ViewModel与ViewBinding?这几种方案值得了解

    但是想在具体页面去写这些手动调用: ViewModelProvider(owner).get(%T::class.java) %T.inflate(layoutInflater) 或者抽象实现...,让去自动帮我初始化,能不能直接在: ViewModelProvider(this).get(VM::class.java) VB.inflate(inflater) 这样会报错,因为运行期间泛型会被擦除也无法实例化对应对象...虽然反射需要在运行时动态解析元数据,执行安全权限检查,以及进行方法调用,虽然反射调用时,JVM会进行额外安全检查,增加了性能开销,但是如果调用次数很少基本和正常方法调用区别不大,特别是对于 Android...混淆,这才是大问题,反射代码在混淆过程我们需要额外注意,因为和成员名称可能会被改变。如果不正确配置混淆规则,可能导致在运行时无法正确地通过名称找到相应、方法或字段,引发异常。...,但是这有点"硬编码"意思了,一旦在修改了这个变量名字就会导致异常,如果你确保不会变动,其实也可以直接用字节码插桩或者AOP面向切面自动赋值到这两个变量

    21910

    Kotlin反射机制深入讲解

    前言 Java反射机制,使得我们可以在运行期获取Java字节码文件构造函数,成员变量,成员函数等信息。...public Constructor[] getDeclaredConstructors() //5.如果类声明在其它构造函数,返回该类所在构造函数如果存在则返回,不存在返回null public...public Method[] getDeclaredMethods() //5.如果这个是其它某个方法内部类,调用getEnclosingMethod()就是这个所在方法;若不存在,返回...Kotlin可以使用Java反射,但是由于Kotlin字节码.class对应是KClass,所以如果想要使用Java反射,需要首先获取Class实例,在Kotlin可以通过以下两种方式来获取...最后就是关于Kotlin反射效率问题,在Java反射大概需要几十微秒,在Kotlin就需要几百甚至上千微秒,如果是通过反射访问对象或构造属性,甚至需要上万微秒,对此,官方给出解释是,现在还没有精力进行优化

    1.8K20

    Java 反射 VS Kotlin 反射

    构造函数引用,获取构造函数 Java 获取构造函数 Java 在获取 Class 实例之后,可以获取其中构造函数。...public Constructor[] getDeclaredConstructors() // 如果类声明在其它构造函数,返回该类所在构造函数如果存在则返回,不存在返回null public...// 声明所有构造函数。 public val constructors: Collection> Kotlin 通过::操作符并添加名来引用构造函数。...Kotlin 和 Java 方法引用使用::操作符,Kotlin 除了可以引用成员函数、扩展函数还可以引用顶层(top-level)函数。...call()方法使用指定参数列表,开发者需要自行匹配所使用实参类型和数量,如果其类型与参数类型匹配,则会引发异常。

    2.6K30

    Kotlin学习笔记(六)-反射

    其实有很多反射地方关于泛型也不敢说完全明白,也在代码中加了很多TODO,希望以后慢慢能熟能生巧,慢慢理解。 在Kotlin调用JavaApi实现反射 1....在Kotlin利用Java反射获取Kotlin成员 被反射Kotlin @Poko class AnnotationTest1(val name: String = "name1") @Poko...} 首先要明白一点Kotlin(如Main.kt),在编译后会生成MainKt,但是这个Kotlin时找不到(在Java可以找到),所以我们想在Kotlin获取Kt,可以使用方法Class.forName...RUNTIME) AnnotationTarget 默认是class(当设置时候) 如果注解参数用 FIELD 其他参考AnnotationTarget定义 注解分作用类型 1-6是注解相关知识,这部分参考...) Kclazz3.memberExtensionFunctions.forEach { println(it.name) } 包级函数 无法反射包级函数 因为本身包级函数就是为了能在任意处都能调用

    2.3K10

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

    2.2继承构造函数 无主构造函数 当实现无主构造函数时,则每个辅助构造函数必须使用super关键字初始化类型,或者委托给另一个构造函数。...请注意,在这种情况下,不同辅助构造函数可以调用类型不同构造函数 例如: class MyView : View(){ constructor(context: Context) :...存在主构造函数 当存在主构造函数时,主构造函数一般实现类型参数最多构造函数,参数少构造函数则用this关键字引用即可 class MyView(context: Context?...Java还是Kotlin,重写类型里面的方法,则称为重写,或者是覆盖类型方法 1.当函数,没有用到open修饰符修饰时候,实现中出现函数函数名不能与没有用open修饰符修饰函数名相同...// 注意,则`final`修饰符在编辑器是灰色,因为Kotlin默认默认是final 那么当一个去继承另外一个时,第二个不想去覆盖掉第一个方法时,第二个该方法使用

    60160

    Kotlin 机制你都了解吗?

    什么是 extension(扩展)函数 ---- Kotlin 可以对一个属性和方法进行扩展,对被扩展代码本身不会造成任何影响。...在 kotlin 中有多少种构造函数 ---- kotlin构造函数分为了两种: 主构造函数和次构造函数。...,如果我们想在构造函数写一些逻辑,怎么办呢, kotlin 给我们提供一个 init 结构体,所有构造函数逻辑都可以写在里面: class Person(val name: String, val...首先伴生对象代码是在加载时就会执行。init代码块方法会按顺序放在主构造函数,主构造函数中原来代码会在后面执行。 9. const 和 val 有什么区别?...如果这些函数任何一个在显式定义或继承自其,则不会自动生成该函数如果变量是 val 修饰,只会生成 get 方法。 11. 什么是 Range 操作符?

    80130

    Kotlin极简教程》第五章 Kotlin面向对象编程(OOP)一个OOP版本HelloWorld构造函数传参Data Class定义接口&实现之写pojo bean定一个Rectangle对象封

    头和主干都是可选如果这个没有主干,花括号可以被省略。 class Empty 构造Kotlin可以有主构造函数和一个或多个二级构造函数。...如果希望你有一个公共构造函数,你需要声明与非缺省可见一个空构造函数: class DontCreateMe private constructor () { } 注意在JVM上,如果所有的主构造函数参数有默认值...(请参阅Java互操作) 重写规则 在Kotlin,实现继承调用通过以下规则: 如果一个继承父成员多种实现方法,可以直接在子类引用, 它必须重写这个成员,并提供其自己实现(当然也可以使用父...同时继承A和B是可以,而且我们在调用a()和b()函数时没有任何问题,因为他们在C只有一个实现。...更具体地讲,如果你声明一个同伴对象在你, 你就可以在Java/ C#调用与它成员方法相同语法静态方法,只使用名作为一个修饰语。

    1.5K40

    C++进阶:继承

    private成员在派生是不能被访问,如果成员不想在外直接被访问,但需要在 派生能访问,就定义为protected。可以看出保护成员限定符是因继承才出现。...,即便构造函数写在初始化列表后面,根据这个也可以断定成员变量是在派生原本成员变量之前定义,因为初始化列表初始化顺序是和声明顺序一致,这说明在派生中继承成员是先声明..._b; A::operator=(b); } 需要注意是,我们在复用赋值拷贝函数时候,需要说明一下作用域,因为两个赋值拷贝函数构成隐藏,所以调用时候会优先调用派生赋值拷贝函数,所以这里如果指定作用域的话...析构函数 对于析构函数来说,首先我们要知道是,在我们调用构造函数时候,先初始化成员,所以应该成员先初始化,然后再初始化派生自身成员,所以这里应该成员先入栈,派生再入栈,...我们还讨论了继承作用域问题以及派生默认成员函数,包括构造函数、拷贝构造函数、赋值拷贝函数和析构函数。 特别地,我们重点分析了析构函数在多态性作用。

    10310

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

    不过早在《Kotlin入门(12)概貌与构造,提到MainActivity继承自AppCompatActivity,而Kotlin对于继承写法是“class MainActivity : AppCompatActivity...Kotlin恰恰相反,它默认每个都不能被继承(相当于Java被final修饰了),如果要让某个成为,则需把该类开放出来,也就是添加关键字open作为修饰。...按照以上开放性相关说明,接下来分别给Bird名、函数名、变量名加上修饰符,改写之后代码是下面这样: //Kotlin默认是不能继承(即final类型),如果需要继承某类,则该父应当声明为...,再来声明一个它子类试试,例如鸭子是鸟类一种,于是下面有了鸭子定义代码: //注意父Bird已经在构造函数声明了属性,故而子类Duck无需重复声明属性 //也就是说,子类构造函数,在输入参数前面不要再加...在Kotlin定义接口需要注意以下几点: 1、接口不能定义构造函数,否则编译器会报错“An interface may not have a constructor”; 2、接口内部方法通常要被实现它进行重写

    1.6K50

    字节跳动凉面(抖音C++)(问题+解答)

    ,若用父指针指向子类对象,父析构函数如果不是虚函数,运行时父析构函数执行而子类析构函数执行,子类多内存无法释放) 11、构造函数里面可以调用函数吗?...在构造函数调用函数、子类构造函数调用函数分别分析,无法实现动态绑定) 12、new和malloc区别,new底层过程是怎样 13、C和C++里static各有什么作用 (static...我们想在函数fun()里使用data这个数据,该怎么做。 答了两种方法,方法1:如果允许修改A定义,可以把fun声明为A友元,就可以用data。...方法2:如果A不可修改,考虑继承方式,定义一个B继承于A,则B可以访问A保护数据,在B写一个公有方法对外返回该保护成员。...字节很看重算法编程能力,应该是死在了第一题,一面后面试官问有什么要问,说如果还有二面会在今天一天内进行。。。结果一下午还是没有通知,确定是凉了。。。

    1.8K00

    Scala和Kotlin脚本编程

    调用外部命令 如果我们想在Kotlin脚本调用外部命令或者程序需要怎么做呢?...使用Java API中提供Runtime.getRuntime().exec()函数或者ProcessBuilder创建一个Process对象调用外部命令。...调用外部命令 在Scala可以调用Java方法,我们可以直接使用上面类似Kotlin方式,但是Scala为我们提供了更加便捷方法来调用外部命令或程序,下面我们来看一下吧!...Scala和Kotlin脚本编程异同 Scala脚本扩展名和执行方式和普通Scala一样;Kotlin脚本扩展名为kts,执行时候需要加-script参数 Scala提供了对于外部命令调用快捷方法...;Kotlin主要依靠Java库进行外部命令调用 在IntelliJ IDEA可以直接运行Kotlin脚本,但是不支持直接运行Scala脚本 IntelliJ IDEA提供了对Ammonite项目的支持

    1.7K10

    【翻译】Kotlin致简代码之路

    而且,我们应该从主要逻辑辨别出细节。 Kotlin 可以帮我们做到这点吗?不行,因为这些规则是无关于语言。这仍然取决于开发者自己来创建小函数。...我们不应该制造出那些一看到函数名称就感觉意图不明显,发生非期望隐藏变化。但是副作用到底是什么问题呢?...在 Java ,我们需要大量模板和形式来正确地创建一个不可变:我们需要定义由 final 修饰字段、属性和构造函数(把参数赋值给对应字段),定义 hashCode() , equals() ,...更加可喜可贺是,它还能够在构造函数里直接使用。...除了这些,还能发现 Kotlin 在对象和数据结构(通过数据)以及并行性( Kotlin 1.1 协程 )上改进。但是 Martin 书籍覆盖了更多主题: ?

    1.4K30
    领券