Java基础补充 内部类

  • 为什么要使用内部类呢?
    我们有时希望一个类结构只被某各类使用,对其他类隐藏
  • 成员内部类——类似外部类的一个属性
    • 类似属性,可以使用权限修饰符进行访问权限控制
    • 不允许有静态方法(也许是过于复杂)
    • 其静态字段必须为final并初始化为一个编译时常量
    • 成员内部类对象有一个隐式引用outer指向构造它的外部类对象(outer并不是关键字,我们不能在程序中显式使用),所以成员内部类可以访问外部类的任意结构,也就是说成员内部类对依赖外部类而存在,成员内部类对象必须由外部类的非静态方法来构造
      public class Outer {
          public static void main(String[] args) {
              Inner inner = new Inner();//外部类静态方法构造成员内部类对象,报错
          }
      
          public void fun() {
              Inner inner = new Inner();//外部类非静态方法构造成员内部类对象
          }
      
          public class Inner{}//成员内部类
      }
  • 静态内部类——类似外部类的静态成员(常用)
    • 类似属性,可以使用权限修饰符进行访问权限控制
    • 不依赖外部类
    • 既然是静态内部类,也就只能访问外部类的任意静态结构了
      public class Outer {
          private static int a = 1;
      
      
          //不依赖外部类,外部类静态方法可以构造静态内部类对象
          private static Inner getInner() {
              return new Inner();
          }
      
      
          //静态内部类
          public static class Inner{
              int b = a;//访问外部类私有静态属性
      
              public void InnerFun() {
                  getInner();//访问外部类私有静态方法
              }
          }
      }
  • 局部内部类——类似于局部变量
    只在该作用域中使用
  • 匿名内部类——用于接口回调,可用lambda表达式替换
    //该匿名内部类实现了Runnable接口
    new Thread(new Runnable() {
        @Override
        public void run() {
            //run方法体
        }
    }).start();

    ——————————————————————————————————————————————————

  • 总结:仔细思考一下上边的四种内部类类型,本质都是一个类作为外部结构的一个组成元素;成员内部类和静态内部类其实都是外部类的成员,区别的产生是因为static的特性——static不能操作非static;局部内部类也就是方法这个外部结构的一个元素;匿名内部类就是创建一个类的对象作为函数的实参

西瓜要挖着吃

一个通往大佬之路的男人

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注