首页
学习
活动
专区
工具
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.6K40

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

82510

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对象表达式与Java匿名内部类主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型。...Kotlin对象表达式可分为两种情形: 对象表达式在方法局部范围,或使用private修饰对象表达式,Kotlin编译器可识别对象表达式真实类型。...Java匿名内部类增强了三个方面: 对象表达式可指定多个父类型 Kotlin编译器能更准确地识别局部范围private对象表达式类型。...对象声明可包含嵌套类,不能包含内部类;而对象表达式可包含内部类,不能包含嵌套类。 对象声明不能定义在函数和方法;但对象表达式可嵌套在其他对象声明或非内部类。...每个类最多只能定义一个伴生对象,伴生对象相当于外部类对象,程序可通过外部类直接调用伴生对象成员。

1.1K31

KotlinKotlin 中使用 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.2K20

Kotlin 之美

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

2.9K20

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

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

97610

【java】浅谈java内部类

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

968101

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

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

1.7K20

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

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

1.1K20

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

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

2.6K20

Kotlin 成员扩展函数和 implicit receiver

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

13210

Kotlin | 4.类、对象和接口

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

91310

Kotlin实体类创建方式

= '1' } 补充知识:Kotlin类、构造器、对象 1.Kotlin定义 类构成: 类构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成 /.../** * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数 * 主构造函数是类头一部分,跟在类名后面 * 在Java,构造方法必须和类名相同,而在Kotlin...") } } } //嵌套类使用 Other.Nested().init() //调用格式为:外部类.嵌套类().嵌套类 方法/属性 6.嵌套内部类 //嵌套内部类 class Othert...) } } } 在主函数调用 Othert().InnerClass().init() // 调用格式为:外部类().内部类().内部类方法/属性 7.匿名内部类定义 fun main(args...class Part{ var numPart : Int = 2 fun test(){ name = "test" numPart = 5 println("我是局部类方法

3.9K10

Better Kotlin

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

1.2K20
领券