内部类

=======说明======

1. 内部类可以是public的,也可以是private及protected,但外部类不能是private及protected。

2. 一个java文件只允许有一个public的class,指的是并列的外部类而言的,但内部类可以是public的。

3.  一个java文件对应一个.class文件,即使该java文件中还有一些非public的类,也在一个.class文件中,

      但若一个public的class中有一个public的内部类,则该内部类会单独生成一个.class文件。

4. Java的普通内部类包含三部分作用

    (1) C++内部类 

    (2) 作为外部类的友元

    (3) 保存外部类的实例

而static的内部类则只包含前两部分的作用。

 举一例说明:

     LedEvent是一内部类,如下定义并初始化内部类对象数组:

     private static final LedEvent[] mLedEvents = new LedEvent[] {

           new LedEvent(6, Led_ALWAYS_RED, false, 0),

           new LedEvent(5, LED_ALWAYS_GREEN, false, 0)

     }

     上面的定义有问题,会提示this指针不能在static的语句中。

     解决这个问题,可以这么做,即把内部类LedEvent,设置成static的,这样就可以了,如下:

     private static class LedEvent() { ...}

     事实上,如果内部类不引用外部类的变量,最好是定义成static的,否则,可能还存在内存泄露的风险。


======使用======

如果内部类要使用外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this:

public class DotThis {

    ...

   public class Inner {

       public DotThis outer() {

           return DotThis.this;

      }

}

其他对象创建某类的内部类的对象,常见的有两种方式:

(1) 在外部类中提供一个方法,创建内部类的对象

public class DotThis {

    public Inner inner() {

         return new Inner();

    }

}

这样,其他对象只需要调用该外部类的这个方法即可:

    DotThis dt = new DotThis();

    DotThis.Inner dti = dt.inner();

(2) 还可以这样直接用:

    DotThis dt = new DotThis();

    DotThis.Inner dti = dt.new Inner();


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值