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

来源:互联网 发布:一钻淘宝店铺多少钱 编辑:程序博客网 时间:2024/05/21 12:49

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))        }    }}
原创粉丝点击