Java之内部类

内部类也相当于类中的成员,一般是私有的,当外部类对象拥有一个对象成员,且这个对象成员仅属于这个外部类,不会被其他类使用时,定义为内部类。例如Person有Heart,Heart仅被Person使用,就可以定义为内部类,且为私有不会被其他类使用。

Java中的内部类创建对象方法:外部类.内部类 引用 = 外部类对象.内部类对象
Inter是Outer的内部类,那么直接创建内部类对象Outer.Inner inner = new Outer().Inner();

先创建外部类对象,再用外部类对象创建内部类对象
Outer outer = new Outer();
Inner inner = outer.new Inner();

外部类如何访问内部类成员?
1.如果内部类是static修饰的,直接用内部类调用非私有的属性和方法
2.如果内部类不是static修饰的,在外部类中要创建内部类对象,才可用对象调用内部类成员

public class Outer {
    class Inner {
        // 定义一个变量10
        int num = 10;
        // 显示该变量的方法
        public void showNum() {
            System.out.println(num);
        }
    }

    public void showInner() {
        // 创建内部类对象
        Inner in = new Inner();
        // 显示内部类的属性
        System.out.println(in.num);
        // 调用内部类的方法
        in.showNum();
    }
}

内部类如何访问外部类成员?
1.外部类成员与内部类成员不重名时,内部类中直接用外部类的成员

public class Outer2 {
    // 定义一个变量10
    int num = 10;
    class Inner {
        // 显示外部类的属性
        public void show() {
            System.out.println(num);
        }
    }
}

2.外部类成员与内部类成员重名时,内部类访问内部类成员用this.获取,内部类访问外部类成员用外部类.this.获取

public class Outer3 {
    // 定义外部类变量
    int num = 10;

    class Inner {
        // 定义内部类变量
        int num = 20;

        public void show() {
            // 定义局部变量
            int num = 30;
            // 输出局部变量
            System.out.println(num);
            // 输出内部类变量
            System.out.println(this.num);
            // 输出外部类变量
            System.out.println(Outer3.this.num);
        }
    }
}

如何继承内部类?
子类继承内部类,当创建子类对象时,构造方法自动调用内部类的构造方法,内部类相当于外部类中的成员,所以要在其他类中使用内部类,必须要先有外部类对象,正常情况下调用父类的构造方法是super(),此处调用内部类的构造方法与super()类似,即Outer.super(),表明是Outer类中的父类。

public class InnerTest extends Out.Inner{
    //内部类初始化之前,外部类必须初始化
    public InnerTest(Out out) {
        //调用Out类中的父类的构造方法
        out.super();
        System.out.println("继承公有内部类");
    }

    public static void main(String[] args) {
        Out out = new Out();
        InnerTest it = new InnerTest(out);
    }
}

你可能感兴趣的:(Java之内部类)