java 内部类

内部类:

 内部类的好处:可以直接操作私有属性。
 
 封装类:
  class1{
   class2{}  //内部类
  }

 内部类的分类:  
  
       成员式:
        静态内部类: (课堂代码:StaticInner.java ,TestStaticInner.java) 生成的内部类的字节码文件StaticInner$Inner1.class 

    在静态内部类中只能访问外部类的静态成员。构造静态内部类对象不再需要构造外部类对象

 

 

        成员内部类:(课堂代码:MemberInner.java ,TestMemberInner.java)
    必须要先构造外部类对象,再根据外部类对象构造内部类对象。
    生成成员内部类对象形式: Inner2 i2=new MemberInner().new Inner2();
    一个外部类对象可以生成多个成员内部类对象,一个成员内部类对象一定是由某一个外部类对象生成的。
    成员内部类不能有静态属性

    内部类和外部类的实例变量可以共存。
    在内部类中访问实例变量:this.属性
    在内部类访问外部类的实例变量:外部类名.this.属性。

    在外部访问时,外部类.内部类作声明,new 外部类(得到外部类对象).new 内部类(得到内部类对象)
      例:MemberInner.Inner2 i2=new MemberInner().new Inner2();

 

 

       局部式:
        局部内部类:定义在外部类的方法中。(课堂代码:MemberInner.java)

    与局部变量类似,在局部内部类前只能用abstract或final修饰符,但一般不加此修饰符,避免对继承产生影响。其范围为定义它的代码块。

 

    局部内部类不仅可以访问外部类实例变量,还可以访问外部类的局部常量,但是要求外部类的局部变量是final的。
    实际上是为内部类添加了一个属性,这个属性就是外部类的final局部变量
    在类外不可直接访问局部内部类(保证局部内部类对外是不可见的)。
    在方法中才能调用其局部内部类。

 

 

        匿名内部类: 特殊的局部内部类,用来继承一个类或者实现一个接口,我们只需要这个局部内部类的一个对象。
      匿名内部类不能定义构造方法
      匿名内部类在编译的时候由系统自动起名Out$1.class。
      如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
      因为匿名内部类无构造方法,所以其使用范围非常的有限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值