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

执行结果为:

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学习苦旅(二十五)——哈希表

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值