写点什么

Java 基础复习(DayEleven):内部类与代理

  • 2021 年 11 月 11 日
  • 本文字数:991 字

    阅读完需:约 3 分钟

  • 内部类可以对同一个包中的所有类隐藏(权限改为 private)

  • 内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据


注意:内部类位于类的内部,并不意味着类的实例都必须要有内部类的实例


内部类是可以访问定义这个类的属性的,因为内部类的对象总有一个隐式引用,指向创建它的外部类对象


对于一般的类,只有包可见性和公共可见性(一个是缺省,另一个是 public,没有 protected 和 private,protected 一般对于外部类权限是没多大用处的)


但对于内部类,可以是所有类型,public、protected、default、private(因为是内部类,外面还套着一个类,所以 protected 是有意义的)

创建内部类

内部类的 new 比较特殊,是建立在以实例化的外部类去执行的(而且前提内部类不为 private)



如果内部类为 private 的话,对于外部是根本找不到这个类的,不可以去调用,而且只有外部类可以构造内部类的实例对象

内部类调用外部类的变量

也是使用 this 关键字,不过为了区分 this(区分是外部类还是内部类),使用外部类的属性时,需要用:外部类名.this 来操作



局部内部类




如果一个类只要使用一次,可以直接在一个方法中局部地去定义这个类,更好地节约了空间


注意:局部内部类声明时是不可以有访问说明符的(public 或者 private),局部类的作用域被限定在声明这个局部类的方法块中,局部类最大的优势就是,对外部世界是完全隐藏的,甚至在本类也不可以访问,也就是除了声明局部类的方法块中,没有任何其他类或方法可以访问局部类,知道其存在


外部方法访问变量

局部类的一


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


个优点就是局部类不仅可以访问外部类的字段,还可以访问方法里面的局部变量



访问的方法与内部类是一致的


匿名内部类




如果对于局部内部类使用时,甚至不需要去定义匿名内部类的名字,只是想单独去创建对象,那么可以不用给其设置名字,称为匿名内部类


比如说,想要一个临时的接口实现类



当然不一定是一个接口,也可以是一个类,如果是接口就要去实现里面的抽象方法,如果是类的话,就可以自定义去进行拓展



lambda 表达式结合局部内部类




前面说过 lambda 表达式适用于函数式接口,所以我们也可以使用 lambda 表达式来实现局部内部类


当然,lambda 表达式生成的相当于是一个参数,所以要使用方法入参来调用



lambda 表达式使用一个空括号代表无参,所以建议,即使只有一个参数,也放在括号里面

评论

发布
暂无评论
Java基础复习(DayEleven):内部类与代理