Java核心技术关于内部类的一些要点

内部类

  • 内部列方法可以访问该类定义所在的作用域中的数据(通过外围类引用)
  • 内部列可以对同一个包中的其他类隐藏起来(设置为private)

内部类注意事项

  • 内部类中所有静态域都必须是final,因为如果不为final,每一个外部类的对象都会有一个单独的实例
  • 内部类不能有static方法(可以有,但是没必要)

两个引用
      外围类作用域外引用内部类 : OuterClass.InnerCLass
      内部类引用外围类 : OuterClass.this

        OuterClass.InnerClass innerClass =outer.new InnerClass();
        在有可见性的情况下,这段代码在Main函数中创建了一个内部类对象
        OuterClass.this.print();
        这段代码在内部类内部调用了外部类的方法(不存在可见性问题)
        InnerClass innerClass = new InnerClass();
        innerClass.InnerMethod();
        这段代码在外部类的方法中,实例化了一个内部类对象,并调用内部类方法(不存在可见性问题)

    内部类是一种编译器现象,与虚拟机无关。编译器会把内部列翻译成用$分隔外部类名和内部类名的常规类文件

局部内部类
     概念:定义在方法内部,不能有访问说明符,对外部世界完全隐藏,包括这个方法所在的类的内部。

特点

  • 同样能访问包含它的外类的变量
  • 访问所在方法中的局部变量(必须为final)
匿名内部类
    在局部内部类中,如果只创建这个类的一个对象那个,就不必命名了

    语法:

   OuterClass anonymous = new OuterClass(){};
静态内部类
    如果使用内部类只是为了吧一个类隐藏在另一个类的内部,并不需要内部类引用外围类对象,可以把内部类声明为staitc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值