Java内部类

目录​​​​​​​

实例内部类

静态内部类

局部内部类

匿名内部类


在Java中,当一个事物的内部需要一个结构,而这个结构又只为这个事物服务的时候,我们就可以使用内部类(例如链表中的节点)。在Java中,可以将一个类定义在一个类或者方法的内部,这种用法我们称之为内部类。

内部类有三种类型:

实例内部类

静态内部类

局部内部类

匿名内部类

其中实例内部类和静态内部类又统称为成员内部类

实例内部类

  1. 实例内部类可以直接访问外部类的任意修饰符修饰的成员
  2. 如果外部类和内部类具有相同成员,则优先访问内部类的成员
  3. 若想访问外部类同名成员可使用 外部类名.this.成员名 的方式
  4. 内部类不能使用static成员,如果使用需要加上final修饰
class OuterClass{
    public int num1 = 1;
    private int num2 = 2;
    public static int num3 = 3;
    class InnerClass{
        public int num4 = 4;
        public int num1 = 10;
        //public static int num = 5;//error
        public static final int num = 5;
        public void show(){
            System.out.println(num1);//内部类的num1
            System.out.println(OuterClass.this.num1);//外部类的num1
            System.out.println(num2);
            System.out.println(num3);
            System.out.println(num4);
            System.out.println(num);
        }

    }
}


public class Main {
    public static void main(String[] args) {

        //实例内部类创建对象
        OuterClass out = new OuterClass();
        OuterClass.InnerClass in = out.new InnerClass();
        //OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();也可以
        in.show();
    }
}

运行结果:

静态内部类

  1. 静态内部类不能访问外部类的非静态成员
  2. 在创建静态内部类对象时不需要先创建外部类对象

class OuterClass{
    public int num1 = 1;
    private int num2 = 2;
    public static int num3 = 3;
    static class InnerClass{
        public int num4 = 4;
        public int num1 = 10;
        //public static int num = 5;//error
        public static final int num5 = 5;//静态内部类可创建静态成员
        public static int num6 = 6;
        public void show(){
            System.out.println(num1);//内部类的num1
            //System.out.println(num2);//访问外部类的num2报错,因为不是静态成员
            System.out.println(num3);
            System.out.println(num5);
            System.out.println(num6);
        }

    }
}


public class Main {
    public static void main(String[] args) {

        //静态内部类创建对象
        OuterClass.InnerClass in = new OuterClass.InnerClass();//不需要提前创建外部类对象
        in.show();
    }
}

运行结果:

局部内部类

局部内部类定义在方法内部,实际开发中使用较少,了解即可

注意:局部内部类对static的使用和实例内部类相同

public class Main {
    public static void main(String[] args) {
        int num1 = 1;
        class InnerClass{
            private int num2 = 2;
            //public static int num3 = 3;
            public static final int num4 = 4;

            public void show(){
                System.out.println(num1);
                System.out.println(num2);
                //System.out.println(num3);//不能定义static成员
                System.out.println(num4);
            }
        }
        //静态内部类创建对象
        InnerClass in = new InnerClass();
        in.show();
    }
}

运行结果:

匿名内部类

在接口中使用,学习完进行补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一只三脚兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值