区分了解Java 成员内部类特点和作用

我们来做一个实验:

package demo_java;

public class Outer {
    private static int i = 1;
    private int j = 10;
    private int k = 20;

    public static void outer_f1() {
        // do more something
    }

    public void out_f2() {
        // do more something
    }

    // 成员内部类
    class Inner {
        // static int inner_i =100; //内部类中不允许定义静态变量
        int j = 100;// 内部类中外部类的实例变量可以共存
        int inner_i = 1;

        void inner_f1() {
            System.out.println(i);// 外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量,直接访问外部类的成员
            System.out.println(j);// 在内部类中访问内部类自己的变量直接用变量名
            System.out.println(this.j);// 也可以在内部类中用"this.变量名"来访问内部类变量
            // 访问外部类中与内部类同名的实例变量可用"外部类名.this.变量名"。
            System.out.println(k);// 外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量
            outer_f1(); // 内部类可以直接访问外部的静态方法
            // outer_f2(); // 内部类无法直接调用外部类的方法
        }
    }

    // 外部类的非静态方法访问成员内部类
    public void outer_f3() {
        Inner inner = new Inner();
        inner.inner_f1();
    }

    // 外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
    public static void outer_f4() {
        // step1 建立外部类对象
        Outer out = new Outer();
        // ***step2 根据外部类对象建立内部类对象***
        Inner inner = out.new Inner();
        // step3 访问内部类的方法
        inner.inner_f1();
    }

    public static void main(String[] args) {
        outer_f4();
    }
}

Eclipse 中显示如下:

总结如下:成员内部类:

不能做的:

1.不能内部类中不允许定义静态变量

2.成员 内部类无法直接调用外部类的方法。

原因分析:

成员内部类无法创建外部对象。

其他同外部类访问一致。可以访问,外部类的方法。属性等。

发布了595 篇原创文章 · 获赞 11 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/104637295