内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类

内部类

故名思义 -- 就是在一个类A的内部定义另外一个类B,那么类A就是外部类,类B就是A的内部类。

首先需要明确:

1、内部类一定要定义在外部类的"{}"里面,而不是简单的写在一篇java文件当中;写在一篇java文件当中,它们两个是平行关系,不是嵌套关系。

2、内部类除了定义的位置有特殊性以外,它在本质上和普通的类没有区别; 包括: a、仍然拥有属性、构造、行为、初始化块、甚至是它的内部类; b、内部类虽然和外部类在同一篇java文件当中定义,但是编译以后它拥有自己独立的class文件。 c、内部类的类名,不是我们书写的简单名,而是和外部类的类名共同组成的。 内部类的class文件名要先添加上外部类的名字和“$”符号,后面再跟上内部类的名字。

内部类的分类

首先根据内部类书写的位置,分为两大类:

1、成员内部类;

如果一个内部类是直接定义在外部类的“{}”当中,它的位置和外部类的属性、方法、构造,都处于平行位置,那么就叫做“成员内部类”。 当然作为外部类的成员,它是可以有访问修饰符的,用来控制这个内部类是否可以被外部使用。

成员内部类编译后的class文件名:外部类名字$内部类的名字

2、局部内部类;

如果一个内部类是定义在外部类的某个方法当中,它的位置和这个方法的局部变量保持一致,那么就叫做“局部内部类”。 作为方法的内部定义,跟局部变量一样出了方法就认为消失不在了,所以它只能在这个方法内部使用,不能有访问修饰符。

局部内部类编译后的class文件名:外部类的名$序号内部类名字 这里序号从1开始,是同名局部内部类编译的顺序序号。

再根据语法特殊性,对“成员内部类”和“局部内部类”再分类:

1、成员内部类分为:普通成员内部类 和 静态内部类; 区别就在于 加不加 static 关键字;

2、局部内部类分为:普通的局部内部类 和 匿名内部类 所谓“匿名”就是没有给这个类起类名,匿名内部类是在定义的时候马上产生对象,只能使用一次。

四种内部类的使用语法

1、普通的成员内部类 要想用普通的成员内部类,首先要先产生外部类的对象,然后用"外部类对象.new" 的语法 去产生内部类对象。

   OutClass1 out = new OutClass1();
   OutClass1.InnerClass1 inner1 = out.new InnerClass1();

2、静态内部类 要用静态内部类,由于有static修饰符,所以这个静态内部类与它所属的外部类对象无关,因此可以不需要产生外部类对象,直接用外部类类名访问。

  OutClass1.InnerClass2 inner2 = new OutClass1.InnerClass2();

3、局部内部类 局部内部类只能在定义它的方法之内使用。

   InnerClass3 inner3 = new InnerClass3();

内部类当中书写this,代表的是当前的内部类对象,如果要表示它所关联的外部类对象,那么要写成“外部类类名.this”; 局部内部类的方法里面,能够操作到外部类的属性,但是不能操作到所属方法的局部变量(只能访问,不能改人家的值,当成常量用)。

4、匿名内部类 匿名内部类是在new对象的同时,去定义这个对象里面的属性和行为,然后由于没有给这个类型取名字,所以只能用这一次。

    new Object(){
            private int a;
            public void test(){
​
            }
        }.test();
   

在new对象的同时,去定义这个对象里面有哪些属性和行为。由于这个对象有了新增的属性和行为,所以它不属于new关键字后面那个类型了,而是属于一种新的具有a属性和test方法的类型,但这种类型没有取名字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值