Kotlin学习笔记——内部类和嵌套类

Kotlin学习笔记——内部类和嵌套类

内部类和嵌套类

    最近在学习Kotlin语言,也在尝试着写一些使用Kotlin的demo,有些无奈的是目前  
相关的中文资料少之又少,很多资料都是机翻的,看得人头大,连实体书《Kotlin实战》的  
翻译都有些让人难受,写得很绕,内部类嵌套类这两页看得我直想睡觉。。这里就简单地总  
结一下这两个很基础的点。

Java中的内部类和嵌套类

    我们在写Java代码的时候,往往会遇到在一个类的内部再定义另一个类的情况,大概  
形式如下:
/**
 * Author iDste-Zhangzy
 * Date 2017/9/6
 * Description
 */
public class JavaOuter extends Activity {
    private String text = "KKK";
    private void funOuter() {
        text = "BBB";
    }
    class Inner {
        private void funInner() {
            funInner();
            text = "ABC";
            startActivity(new Intent(JavaOuter.this, MainActivity.class));
        }
    }
}
    以上的形式即是内部类。我们可以发现,内部类持有了外部类的引用,我们可以在内部  
类中调用startActivity()方法,可以调用外部类中定义的方法funOuter(),可以使用  
外部类中定义的变量text,同时可以用JavaOuter.this这样的形式引用外部类实例。再  
看另一段代码:
/**
 * Author iDste-Zhangzy
 * Date 2017/9/6
 * Description
 */
public class JavaOuter extends Activity {
    private String text = "KKK";
    private void funOuter() {
        text = "BBB";
    }
    static class Inner {
        private void funInner() {
            funInner();
            text = "ABC";
            startActivity(new Intent(JavaOuter.this, MainActivity.class));
        }
    }
}
    把这段代码放到你的IDE里,肯定是会飘红的。与第一段代码相比,这里只是在Inner  
前面加上了static修饰,这样一来,Inner类就成为了嵌套类,它不再持有外部类的引用,  
再使用外部类的funOuter()、text以及调用startActivity()方法,肯定是会报错的。  

    区分内部类与嵌套类,很简单,内部类存储了外部类的引用,嵌套类却没有。Java  
中,将一个类定义在另一个类内部,不加任何的修饰符,那它将被默认为一个内部类,而加  
上static修饰,则成为了一个嵌套类。

Kotlin中的内部类和嵌套类

    Kotlin中的内部类与嵌套类的定义,跟Java并没有什么不同,区别在于在没有任何修  
饰的情况下,定义在另一个类内部的类将被默认为嵌套类,不持有外部类的引用,如果要将  
它声明为一个内部类,则需要加上inner修饰符,代码如下:
/**
 * Author iDste-Zhangzy
 * Date 2017/9/6
 * Description
 */
class KotlinOuter : Activity() {
    private var mText = "outer"
    private fun funOuter() {
        mText = "outer fun"
    }

    inner class Inner {
        private fun funInner() {
            mText = "inner"
            funOuter()
            startActivity(Intent(this@KotlinOuter, MainActivity::class.java))
        }
    }
}
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin中的嵌套类(Nested Classes)和内部类(Inner Classes)是非常相似的概念,但有一些细微的区别。以下是对它们的一些基本介绍: 1. **嵌套类(Nested Classes)**:在Kotlin中,嵌套类是一种类,它包含在另一个类的内部。它可以是静态的(static)、非静态的(inner)或者局部的(local)。嵌套类可以从任何访问它的外部类访问字段、方法、构造器和嵌套类。这允许一个类的数据可以在嵌套类中被更细粒度地访问和控制。 ```kotlin class OuterClass { class NestedClass { // code inside } } ``` 2. **内部类(Inner Classes)**:内部类是定义在另一个类内部的类。它可以直接访问外部类的所有成员,包括字段、方法、构造器和嵌套类。内部类可以包含自己的构造函数,并且可以访问外部类的私有成员。内部类可以嵌套在其他内部类中,形成一个复杂的层次结构。 ```kotlin class OuterClass { inner class InnerClass { // code inside } } ``` 总的来说,内部类在实现接口、继承某个类或封装内部数据结构时特别有用。另一方面,嵌套类提供了一种更灵活的方式来访问外部类的数据和方法,即使外部类在不同的包或模块中。 需要注意的是,尽管Kotlin中的嵌套类和内部类非常相似,但在某些情况下,使用嵌套类的语法可能更清晰和直观。例如,使用嵌套类可以更清楚地表示一个类的嵌套结构,而内部类则更适合实现接口或封装内部数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值