kotlin和Java内部类和嵌套类

Java中的内部类和嵌套类

/**
 * Author huxiubo
 * Date 2018/3/6
 * Description
 */
public class Button extends View {
    private String text = "111";
    private void funOuter() {
        text = "222";
    }
    class Inner {
        private void funInner() {
            funInner();
            text = "ABC";
            startActivity(new Intent(JavaOuter.this, MainActivity.class));
        }
    }
}

以上的形式即是内部类。我们可以发现,内部类持有了外部类的引用,我们可以在内部
类中调用startActivity()方法,可以调用外部类中定义的方法funOuter(),可以使用
外部类中定义的变量text,同时可以用JavaOuter.this这样的形式引用外部类实例。再
看另一段代码

 * Author huxiubo
 * Date 2018/3/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 huxiubo
 * Date 2018/3/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))
        }
    }
}

你可能感兴趣的:(kotlin和Java内部类和嵌套类)