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

发布时间:2024年01月10日

本篇博客将讲解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();
    }
}

执行结果为:

image-20220315174011596

静态内部类

静态内部类是在实例内部类前面加上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();
    }
}

执行结果为:

image-20220315175310946

匿名内部类

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

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

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

执行结果为:

image-20220315175912952

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

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();
    }
}

执行结果为:

image-20220315180101109

结尾

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

文章来源:https://blog.csdn.net/m0_53408775/article/details/135445418
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。