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

如何在Kotlin中从内部类调用外部类的超方法?

在Kotlin中,可以使用关键字super来调用外部类的超方法。具体步骤如下:

  1. 在内部类中,使用super关键字来调用外部类的超方法。
  2. 如果外部类的方法是非静态的,需要先创建外部类的实例对象,然后通过该对象调用超方法。
  3. 如果外部类的方法是静态的,可以直接使用外部类的类名来调用超方法。

以下是一个示例代码:

代码语言:txt
复制
class OuterClass {
    fun outerMethod() {
        println("This is the outer method.")
    }

    inner class InnerClass {
        fun innerMethod() {
            // 调用外部类的超方法
            super@OuterClass.outerMethod()
        }
    }
}

fun main() {
    val outer = OuterClass()
    val inner = outer.InnerClass()
    inner.innerMethod()
}

在上述示例中,OuterClass是外部类,InnerClass是内部类。在InnerClassinnerMethod方法中,使用super@OuterClass.outerMethod()来调用外部类的outerMethod方法。

注意,使用super关键字调用外部类的超方法只适用于内部类,而不适用于嵌套类。

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

相关·内容

Kotlin 漫谈系列之类与继承

在 Kotlin 中,如果一个类从它的直接超类继承相同成员的多个实现(由于接口函数可以有实现),它必须覆盖这个成员并提供其自己的实现。...为了表示采用从哪个超类型继承的实现,我们使用由尖括号中超类型名限定的 super,如 super。...这种写法在 Java 里面就是定义内部类,在 Kotlin 里面要定义内部类反而要加上 Inner 关键字。 Swift: Swift 没有内部类的概念。? Kotlin: ?...中,如果一个类从它的直接超类继承相同成员的多个实现(由于接口函数可以有实现),它必须覆盖这个成员并提供其自己的实现。...为了表示采用从哪个超类型继承的实现,我们使用由尖括号中超类型名限定的 super,如 super。

3.7K40

kotlin基础语法

do { //代码语句 }while(布尔表达式); 返回和跳转 Kotlin 有三种结构化跳转表达式: return。默认从最直接包围它的函数或者匿名函数 返回。 break。...internal // 同一个模块中可见 继承 Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: class Example // 从 Any 隐式继承...初始化基类时,可以调用基类的不同构造方法。...如果你使用匿名对象作为公有函数的 返回类型或者用作公有属性的类型,那么该函数或属性的实际类型 会是匿名对象声明的超类型,如果你没有声明任何超类型,就会是 Any。在匿名对象 中添加的成员将无法访问。...类委托 类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。

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

    } 伴生对象与静态成员 kotlin 中时没有static 这种方法修饰的静态方法 所以要实现 类似于java中的静态属性就要用到伴生对象 例子: fun main(args: Array<String...) } @JvmField//加上这个注解可以在Java中如static一样调用 val TAG = "Latitude" } } 每个类可以对应一个伴生对象...(非静态内部类持有外部类的引用,而静态内部类无法持有外部类的引用,这是因为静态内部类优先于非实例对象而存在) 内部类和静态内部类的区别: 是否持有外部类的状态(也就是非静态内部类中可以调用 外部类.this...println(a)//访问不到 说明kotlin中默认是使用静态static内部类的 println(this@Outter.a)//当内外部类重载相同的属性或方法时 通过this...枚举类中定义方法,那么要在枚举对象最后加上; 这基本是Kotlin中唯一一个需要强制写;的地方 密封类 密封类与枚举的区别:前者是子类可数,后者是实例可数 密封类(Sealed Class)的子类必须和父类定义在同一个文件中

    85510

    Kotlin入门(29)任务Runnable

    运行一个任务也有多种形式,既可在UI线程中调用处理器对象的post或者postDelayed方法,也能另外开启分线程来执行Runnable对象。...的内部类,再重写它的run方法,填入具体的业务逻辑处理。...此时的声明代码便从内部类方式变成了匿名内部类方式,采取Kotlin编码的话注意使用关键字object占位,表示这是一个匿名内部类,完整的Kotlin代码如下所示:     private val counter...count++         tv_result.text = "当前计数值为:$count"     } 上述去掉圆括号的办法,只适合post方法这种仅有一个参数的调用,如果其它方法存在多个输入参数如...匿名函数虽然无法重复调用,但是尚且允许在不同地方多次调用,而匿名实例只能在它待过的地方昙花一现,因此还是要根据实际的业务要求来选择合适的任务方式。 点此查看Kotlin入门教程的完整目录

    1.9K20

    【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )

    放在 括号内进行传递 ; foo(5, { x -> x * x }) 使用 尾随 Lambda 语法 的调用方式 : 将第二个函数参数提取到括号外面 , 也就是将 Lambda 表达式 写在括号的外部..., 最后一个函数是匿名内部类 , 匿名内部类中只实现了一个函数 , 此时使用 Lambda 表达式替代该 匿名内部类 ; 如 : 为按钮添加点击事件 , 对应的 Java 代码是 button.setOnClickListener...} } 符合以下两个条件 : 函数 接收一个 接口类型 的匿名内部类 或 对象表达式 ; 该 接口类型 中 只定义了一个函数 ; 可以 省略掉 匿名内部类 也就是 对象表达式的定义 , 直接使用 接口中的函数...onClick(View v); 函数类型 ; 如果 在 setOnClickListener 函数中设置了 (View) -> Unit 类型的 Lambda 表达式 , Kotlin 编译时会查找..., 并且将该 Lambda 表达式作为该匿名内部类的函数实体 ; 如果 传入的 Lambda 表达式类型 , 不符合 接口中的唯一的函数类型 , 也就是再该示例中 Lambda 表达式类型不是 (View

    1.3K20

    Kotlin 之美

    EJ 第1条:考虑使用静态工厂方法代替构造器 在实例化对象的方式中,使用静态工厂方法相比构造器有几个好处: 工厂方法拥有名字,易于开发者理解。...Kotlin 新增了顶层声明的类别(顶层函数和顶层属性,无需放在类中的属性和方法)。...EJ 第22条:优先考虑静态成员类 在 Java 中,我们经常要把一个类定义在另外一个类的内部,该类被称之为内部类。内部类有四种:静态成员类、非静态成员类、匿名类和局部类。...Kotlin 在语法层面直接对该条款进行支持,静态成员类在 Kotlin 中称为『嵌套类』,默认的内部类便是嵌套类,比如: class Outer { class Inner { // 默认便是静态成员类...Kotlin 同样是这条准则的兢兢业业的践行者,因为在 Kotlin 中重写方法,必须必须必须强制加上 override。 Kotlin 与 《Effective Java》相映成辉,显得美不胜收。

    2.9K20

    第4章 类与面向对象编程第4章 类与面向对象编程

    在ALGOL60中采用了以 Begin - End 为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。在编程语言中首次提供了封装(保护)的机制。...因此,每一个对象包含两部分:成员变量和成员方法。在成员方法中可以改变成员变量的值。 2.程序是对象的集合,他们通过发送消息来告知彼此所要做的事情,也就是调用相应的成员函数。...在Java 8 和Kotlin中,接口可以实现一些通用的方法。 接口是抽象类的延伸,Kotlin跟Java一样,不支持同时继承多个父类,也就是说继承只能存在一个父类(单继承)。...,或者从超类中继承而来,编译器就不再生成。...本章小结 本章我们介绍了Kotlin面向对象编程的特性: 类与构造函数、抽象类与接口、继承与组合等知识,同时介绍了Kotlin中的注解类、枚举类、数据类、嵌套类、内部类、匿名内部类、单例object对象等特性类

    1.8K20

    【java】浅谈java内部类

    首先要考虑的是“this”的问题,外部类和内部类各有一个this,关键在于内部类中我们如何对这两个this作出区分: 我们假设上面的例子中的Inner类内部有一个方法fn: private class...这样的话,它就能更好地隐藏起来,即使是类Outter中除outterPrint外的方法,也不能访问到它: 现在的Outter的类看起来像这样: public class Outter { public...且听我慢慢道来: 首先要说一下: 1.内部类和外部类在编译之后形式上是一样的,不会有内外之分 2.局部内部类对于使用的外部方法的值会用构造函数做一个拷贝(编译后) 例如对于下面outterPrint方法中的...(基本类型数据拷贝副本,对象等则拷贝引用) OK,现在的情况是: 方法内的局部类对data拷贝了两次:外部方法outterPrint值传递时的拷贝,和LocalInner构造函数的拷贝 方法内除了局部类外的作用域只拷贝了...在使用监听器等场景的时候使用匿名内部类,避免增加的大量代码 关于成员内部类, 方法局部类,匿名内部类的关系 从成员内部类,方法局部类到匿名内部类是一个不断深入的关系, 成员内部类进一步隐藏可见性就成为了方法局部类

    1K101

    【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )

    文章目录 一、闭包概念 二、Java 中函数作为参数的替代方案 ( 匿名内部类 ) 一、闭包概念 ---- 匿名函数 就是 Lambda 表达式 , 同时也是 闭包 , 三者的是相同的概念 ; 闭包意义...在一个 脚本文件 中 , 如 Kotlin 的脚本 , 就需要 使用 函数 进行作用域区分 , 将一个作用域内的相关代码 , 都写在一个函数中 , 这样就可以将作用域分区分开 ; 匿名函数 作用域 :...在 匿名函数 / Lambda 表达式 / 闭包 中 , 可以 引用 作用域 之外的变量 , 如 : 在 函数 A 中定义了 匿名函数 B , 则 在 匿名函数 B 中 , 可以引用 函数 A 中的变量...参数 或 返回值 的 函数 ; 使用 匿名函数 / Lambda 表达式 / 闭包 作为 参数 / 返回值 的函数 是 高级函数 ; Kotlin 中经常使用 链式调用 , 就是 函数式编程 的风格...; 二、Java 中函数作为参数的替代方案 ( 匿名内部类 ) ---- Kotlin 中引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 闭包 作为 函数参数 或 返回值 , 可以写出

    1.1K10

    Kotlin中级(9)- - - Kotlin类之数据类、密封类、内部类.md

    val或var 数据类不能是抽象类、open类、封闭类、内部类 数据类不能继承自任何其他类(但可以实现接口) 3.访问数据类的2种方法 和普通类一样"对象名.数据名" 编译器从主构造函数中声明的属性中导出的成员方法...但是,我们知道Kotlin的枚举类中的枚举常量是受限的,因为每一个枚举常量只能存在一个实例 但是其和枚举类不同的地方在于,密封类的一个子类可以有可包含状态的多个实例。...().init() // 调用格式为:外部类.嵌套类().嵌套类方法/属性 } 注意 调用嵌套类的属性或者方法格式为: 外部类.嵌套类().嵌套类方法/属性。.../属性 } *注意 调用内部类的属性或方法的格式为:外部类().内部类().内部类方法/属性。...()”访问内部类,继承的子类能直接访问父类公开的成员属性及方法,而内部类值能通过this@外部类的方式访问外部类的属性和方法 从能否覆盖上看,继承的子类能覆盖父类用open标记的属性和方法,内部类不能覆盖外部类的属性和方法

    1.2K20

    Kotlin | 4.类、对象和接口

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

    96210

    Kotlin | 一份10万字的随查笔记,妈妈再也不担心我不会Ctrl+F了

    看起来可能有点标题党的意思,但我知道,不这样,你们可能看不到这篇。 关于Kotlin相关记录,如果有意查看我的github,其超10w字(其中8w是代码吗,哈哈)。。...一些看过的书的个人感受: Kotlin核心编程 水滴技术团队出的,从Kotlin的背景到各种使用细节都有概述,说它是一本神书(工具书,No)不足为过。...Lambda表达式类型一样,那么进一步简化 args.forEach (::println) 类成员(成员方法,成员变量) 什么是类成员 属性:或者说成员变量,类范围内的变量 方法:成员函数,类范围内的函数...函数和方法的区别 函数强调功能本身,不考虑从属 方法的称呼通常是从类的角度出发 3....几类函数的调用 包级函数:静态方法 在java里并没有这种函数,它在编译的时候,会为Kotlin生成一个类,这个类包含了所有包级函数,在java看来,这些都只是静态方法,所以在java调用的时候,按照静态按方法调用即可

    2.8K20

    Kotlin 的成员扩展函数和 implicit receiver

    咱来从它的基本特性说起。...另外,对于它们同名的成员变量或者方法,如果我也省略掉 this: 拿到的就是内部类的成员。如果想拿外部类的,就必须把 this 写完整: 到现在为止,做 Java 的基本是都懂的。我们继续。...只不过写法稍微变了一下: 所以,Java 和 Kotlin 不仅都有 implicit receiver,而且也都是能嵌套的,同一个方法里可以有多个 this,或者说多个 implicit receiver...——那我到底对谁调用? Java 没有扩展函数的概念,所以不存在这种写法,但 Kotlin 是可以的。...但是需要注意,这个 this 它也不是从空气里蹦出来的:当我们这么声明 block 参数的时候,就只有对 IntMultiplier 类型的对象才能调用它。

    22510

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

    “this(context,name)”这句代码在Java中要以“super(context,name)”的形式写在函数体内部,在Kotlin中则以冒号开头补充到输入参数后面,这意味着二级构造函数实际上是从主构造函数派生出来的...(2)Kotlin除了常规的三个开放性修饰符public、protected、private外,另外增加了修饰符internal,表示只对本模块开放。...$flowerName" } } } 调用嵌套类时,得在嵌套类的类名前面添加外部类的类名,相当于把这个嵌套类作为外部类的静态对象使用,在Activity中调用代码如下: package...4.2 内部类 Kotlin限制了嵌套类不能访问外部类的成员,那还有什么方法可以实现此功能呢?...针对该问题,Kotlin另外增加了关键字inner表示内部,把inner加在嵌套类的class前面,然后嵌套类就变成了内部类,所以Kotlin的内部类就相当于Java的嵌套类,而Kotlin的嵌套类则是加了访问限制的内部类

    1.2K20

    Better Kotlin

    具有 O(1) 的复杂度。 计算时的消耗很少。 同时多次调用有相同的返回值。 因此上面提到的,自定义 getter 方法并随着当前时间的不同而返回不同的值违反了最后一条原则。...访问一个伴生对象的私有常量字段需要经过以下方法: 调用伴生对象的静态方法 调用伴生对象的实例方法 调用主类的静态方法 读取主类中的静态字段 为了访问一个常量,而多花费调用4个方法的开销,这样的 Kotlin...核心意思是:Kotlin 使用 object 代替 Java 匿名内部类实现。 很明显,即便如此,这里的访问应该也是合情合理的。从匿名内部类中访问成员变量在 Java 语言中是完全允许的。...确实,Java 中静态内部类是不允许访问外部类的成员变量的。但,说好的 object 代替的是 Java 的匿名内部类呢?那这里为啥是静态内部类。...但由于某些原因,当我把上面的 ISkipService 类修改为了 Kotlin 实现,却发生了崩溃,从代码上暂时没看出问题。

    1.3K20

    Java程序员如何在编码中减少bug存在

    Java编程语言在IT行业毋庸置疑是企业中不可缺少的,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能。   ...要访问该类外的对象,大家可使用GET与SET方法。   对每个对象,编写一个新的私有boolean变量并对其进行初始化。   编写一个非构造函数类,其将确保每个对象会在接受调用之前进行初始化。   ...避免使用内部类   一般来讲,开发者会在同一软件包内其它类需要时使用内部类。这些内部类通常可供同一软件包内全部类进行访问,由此可能引发的问题在预定义代码范围部分已经提到。...因此,同样请仅在必要时使用内部类。   保护类、方法与变量   在代码当中,类、方法与变量分为私有与公共两类。私有类无法轻松进行访问,这使其成为代码中的高安全性点。...黑客可以利用单一漏洞插入自己的类,进而从代码中提取敏感信息。JVM在默认情况下即不会封闭,不过允许大家在该软件包内进行类封闭。

    54200
    领券