Java内部类

内部类是定义在一个类中的类
- 内部类可对同一个包中的其他类隐藏起来
- 定义一个回调函数且不想编写大量代码时,匿名内部类比较便捷
- 内部类既可以访问自身的数据域和方法,也可以访问创建它的外部类的所有数据域和方法
- 只有内部类可以是私有类(private),而常规类只能是包可见性(默认,什么都没写)或公有可见性(public)
- 只有内部类才能声明为static

成员内部类

  • 作为外部类的成员变量,外部类要访问内部类的所有成员变量/方法,需要通过内部类的对象来获取
  • 成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己
  • 在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象

局部内部类

  • 类定义在方法中,不能用public或private声明,作用域限定在此方法中,外部类的其他代码也无法访问
  • 除了能访问外部类,还能访问此方法的局部变量,不过这些局部变量必须是final

    public void start(int a, final boolean flag)
    {
        class Inner
        {
            public void action()
            {
                System.out.println(flag);
            }
        }
    
        Inner inner = new Inner();
        inner.action();
        System.out.println(a);
    }

匿名内部类

  • 只创建这个类的一个对象,不必命名(没有类名
  • 由于构造器的名字和类名相同,而匿名类没有类名,所以匿名类不能有构造器
  • 匿名内部类的this指的是匿名内部类自身,要获得外部类的引用:outerClass.this,其中outerClass为外部类的类名
public void start(int interval, final boolean beep)
{
    ActionListener listener = new ActionListener() //类定义直接跟在接口后面
    {
        public void action()
        {
            //do something
        }
    };

    listener.action();
}

public void execute()
{
    // an object of an inner class extending Person class
    Person count = new Person("lala"){...}
}

静态内部类

  • 只是为了把一个类隐藏在另一个类的内部,不能引用外部类里的对象(只能访问外部类的静态数据域和方法)
  • 生成一个静态内部类不需要外部类

    Outer.Inner in = new Outer.Inner();
  • 作为外部类的成员变量,不能放在方法中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值