技术疑问:访问嵌套类或类成员时,父类何时加()何时不加?
父类后加不加()的核心原因:静态嵌套类 vs 依赖实例的内部类
这两种写法的差异,本质是嵌套类的类型不同,不管是Kotlin还是Java等其他面向对象语言,逻辑都是一致的:
不加
()的场景:Outer.Nested()
这里的Nested是静态嵌套类(Kotlin里直接用class Nested定义在Outer内部)。它属于Outer这个类本身,和外部类的实例完全无关,就像类的静态方法、静态变量一样,直接通过类名就能访问,所以Outer后面不需要加()创建实例。加
()的场景:Outer().Nested()
这里的Nested是内部类(Kotlin里需要用inner class Nested声明)。它持有外部类Outer的实例引用,必须先创建Outer的实例(也就是Outer()),才能访问这个内部类并创建它的对象。
举个Kotlin代码例子更直观:
// 静态嵌套类:不依赖外部类实例 class Outer { class Nested { fun foo() = println("我是静态嵌套类的foo方法") } } // 内部类:必须绑定外部类实例 class Outer2 { inner class Nested { fun foo() = println("我是内部类的foo方法") } } fun main() { // 直接通过类名访问静态嵌套类 Outer.Nested().foo() // 先创建外部类实例,再访问内部类 Outer2().Nested().foo() }
内容的提问来源于stack exchange,提问作者Hyejung
相关产品推荐
相关产品推荐

