Java学习苦旅(二十四)——Java中的内部类

本篇博客将讲解Java中的内部类。

文章目录

  • 内部类
    • 本地内部类
    • 实例内部类
    • 静态内部类
    • 匿名内部类
  • 结尾

内部类

本地内部类

本地内部类是定义在方法当中的类。例如:

public class Test {
    public void fun() {
        class Test {
            public int a;
        }
    }
}

本地内部类只能在当前方法中使用。

实例内部类

在实例内部类当中不能定义一个静态的成员变量,但可以定义静态常量。例如:

class OuterClass {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    class InnerClass {
        public int data4 = 4;
        private int data5 = 5;
        public static final int data6 = 6;
        
        public InnerClass() {
            System.out.println("不带参数的构造方法");
        }
    }
    
    public void fun() {
        System.out.println("++++++++++++");
    }
} 

那么如何去实例化实例内部类呢?

实例化:外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();

OuterClass outClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();

这样便可以实例化内部类了。

在实例内部类中如果包含了与外部类同名的成员变量,那么则需调用外部类类名进行访问,例如:

class OuterClass {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    class InnerClass {
        public int data1 = 999999999;
        public int data4 = 4;
        private int data5 = 5;
        public static final int data6 = 6;
        
        public InnerClass() {
            System.out.println("不带参数的构造方法");
        }
        
        public void test() {
            System.out.println(OuterClass.this.data1);
            System.out.println(this.data1);
        }
    }
    
    public void fun() {
        System.out.println("++++++++++++");
    }
} 

public class TestDemo {
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        innerClass.test();
    }
}

执行结果为:

Java学习苦旅(二十四)——Java中的内部类_第1张图片

静态内部类

静态内部类是在实例内部类前面加上static即可,例如:

class OuterClass2 {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    
    static class InnerClass {
        public int data4 = 4;
        private int data5 = 5;
        public static int data6 = 6;
        
        public void test() {
            System.out.println("=========");
        }
    }
}

实例化静态内部类,例如:

OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();

访问外部类的成员变量,例如:

class OuterClass2 {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

    static class InnerClass {
        public int data4 = 4;
        private int data5 = 5;
        public static int data6 = 6;

        public void test() {
            OuterClass2 outerClass2 = new OuterClass2();
            System.out.println(outerClass2.data1);
            System.out.println("=========");
        }
    }
}

public class Test {
    public static void main(String[] args) {
        OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
        innerClass.test();
    }
}

执行结果为:

Java学习苦旅(二十四)——Java中的内部类_第2张图片

匿名内部类

匿名内部类在前面的博客中也已经出现过,这里就稍微介绍一下。

class A {
    public void test() {
        System.out.println("===========");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        new A() {
            
        }.test();
    }
}

执行结果为:

Java学习苦旅(二十四)——Java中的内部类_第3张图片

当然,也可以重新匿名内部类的方法,例如:

class A {
    public void test() {
        System.out.println("===========");
    }
}

public class TestDemo {
    public static void main(String[] args) {
        new A() {
            @Override
            public void test() {
                System.out.println("++++++++++++++++++++++++");
            }
        }.test();
    }
}

执行结果为:

Java学习苦旅(二十四)——Java中的内部类_第4张图片

结尾

本篇博客到此结束。
上一篇博客:Java学习苦旅(二十三)——二叉搜索树
下一篇博客:Java学习苦旅(二十五)——哈希表

你可能感兴趣的:(Java学习苦旅,java,学习,开发语言)