java实例内部类详细介绍

KLQ 2020-09-07 10:18:17 java常见问答 5017

实例内部类指的就是没有用static修饰的内部类,下面的话,就一起通过文章详细来对它进一步的进行详细了解吧。

示例:

public class Outer
{
    class Inner
    {
        // 实例内部类
    }
}

在上面的代码当中,Inner类就是实例内部类。

实例内部类特点:

1、在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例;

public class Outer
{
    class Inner1
    {}
    Inner1 i = new Inner1(); // 不需要创建外部类实例
    public void method1()
    {
        Inner1 i = new Inner1(); // 不需要创建外部类实例
    }
    public static void method2()
    {
        Inner1 i = new Outer()
            .new inner1(); // 需要创建外部类实例
    }
    class Inner2
    {
        Inner1 i = new Inner1(); // 不需要创建外部类实例
    }
}
class OtherClass
{
    Outer.Inner i = new Outer()
        .new Inner(); // 需要创建外部类实例
}

2、在实例内部类中,可以访问外部类的所有成员;(假如,有多层嵌套,那么,内部类可以访问所有外部类的成员)

public class Outer
{
    public int a = 100;
    static int b = 100;
    final int c = 100;
    private int d = 100;
    public String method1()
    {
        return "实例方法1";
    }
    public static String method2()
    {
        return "静态方法2";
    }
    class Inner
    {
        int a2 = a + 1; // 访问public的a
        int b2 = b + 1; // 访问static的b
        int c2 = c + 1; // 访问final的c
        int d2 = d + 1; // 访问private的d
        String str1 = method1(); // 访问实例方法method1
        String str2 = method2(); // 访问静态方法method2
    }
    public static void main(String[] args)
    {
        Inner i = new Outer()
            .new Inner(); // 创建内部类实例
        System.out.println(i.a2); // 输出101
        System.out.println(i.b2); // 输出101
        System.out.println(i.c2); // 输出101
        System.out.println(i.d2); // 输出101
        System.out.println(i.str1); // 输出实例方法1
        System.out.println(i.str2); // 输出静态方法2
    }
}

3、在外部类中不能直接访问内部类的成员,而必须通过内部类的实例去访问。

假如,类A包含内部类B,类B当中包含内部类C,那么,在类A当中不能直接访问类C,应该通过类B的实例去访问类C;

4、外部类实例与内部类实例是一对多的关系,也就是说一个内部类实例只对应一个外部类实例,而一个外部类实例则可以对应多个内部类实例。

假如,实例内部类B和外部类A包含有同名的成员t,那么,在类B当中,t和this.t都表示B当中的成员t,而A.this.t表示A当中的成员t;

public class Outer
{
    int a = 10;
    class Inner
    {
        int a = 20;
        int b1 = a;
        int b2 = this.a;
        int b3 = Outer.this.a;
    }
    public static void main(String[] args)
    {
        Inner i = new Outer()
            .new Inner();
        System.out.println(i.b1); // 输出20
        System.out.println(i.b2); // 输出20
        System.out.println(i.b3); // 输出10
    }
}

5、在实例内部类中不能定义static成员,除非同时使用final和static修饰;

以上就是对于java实例内部类的一个介绍了,请多多的关注奇Q工具网吧,更多的java基础知识,可以为你分享。

推荐阅读:

java内部类最简单的应用分享,使用方法实例

java内部类是什么?详细介绍

java抽象类,java抽象(abstract)类详细介绍