Java基础复习——内部类

内部类

什么是内部类?

  • 一个类中又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。
  • 内部类的最大特点:可以直接访问私有属性,并且可以体现类与类之间的包含关系。

为什么使用内部类

  • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据
  • 内部类可以对同一包中的其他类隐藏起来
  • 当想要定义一个回调函数且不想编写大量代码是,使用匿名内部类比较便捷

基本语法:

class Outer {	// 外部类
    class Inner{	// 内部类
        
    }
}

class Other {	// 外部其他类
    
}

​ 类的五大成员:

  • 属性
  • 方法
  • 构造器
  • 代码块
  • 内部类

内部类的分类

定义在外部类的局部位置上(如方法内):

  • 局部内部类

  • 匿名内部类

定义在外部类的成员位置上:

  • 成员内部类

  • 静态内部类

局部内部类

说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名

基本语法:

class Outer {
    public void m1() {
        class Inner {
           类体
        }
    }
}

细节

  1. 可以直接放问外部类的所有成员,包括私有的
  2. 不能添加访问修饰符,地位等同于局部变量,可以用 final 修饰
  3. 作用域:仅仅在定义它的方法或者代码块中
  4. 局部内部类---访问--->外部类的成员【访问方式:直接访问】
  5. 外部类访问---访问--->局部内部类的成员 【访问方式:创建对象,在访问(注意,必须在作用域内)】
  6. 外部其他类---不能访问--->局部内部类(地位等同于局部变量)
  7. 如果外部类和局部内部类的成员重名是,默认遵循就近原则,如果想访问外部类的成员,则可以使用【外部类名.this.成员】去访问。

匿名内部类

说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名 (底层是有类名的,例如Outer$1,Outer$2 ……)

基本语法:

class Outer {
    pubic void m1() {
        new 类或接口(参数列表){
    类体
};
    }
}

细节

  1. 匿名内部类既是一个类的定义,同时本身也是一个对象。一次从语法上看,既有定义类的特征,创建对象的特征
  2. 可以直接访问外部类的所有成员,包括私有的
  3. 不能添加访问修饰符,因为地位等同局部变量
  4. 作用域:仅仅在定义它的方法或代码块中
  5. 匿名内部类--访问-->外部类成员 【访问方式:直接访问】
  6. 外部其他类--不能访问-->匿名内部类(因为匿名内部类地位等同于一个局部变量)
  7. 如果外部类和匿名内部类的成员重时,匿名内部类访问,默认遵循就近原则,如果想访问外部类的成员,则可以使用【外部类名.this.成员】去访问
  8. 可以当作实参直接传递,简洁高效

成员内部类

说明:成员内部类是定义在外部类的成员位置,并且没有 static 修饰

class Outer {
    class Inner {
        类体
    }
}

细节:

  1. 可以直接访问外部类的所有成员,包含私有的

  2. 可以添加任意访问修饰符,应为它的地位就是一个成员

  3. 作用域和其他的外部类成员一样,为整个类体

  4. 成员内部类--访问-->外部类(比如属性),【访问方式:直接访问】

  5. 外部类--访问-->内部类,【访问方式:创建对象,再访问】

  6. 外部其他类--访问-->成员内部类

    // 第一种方式
    Outer.Inner outerInner = outer.new Inner(); 
    // 第二种方法,在外部类中,编写一个方法,可以返回 这个内部类对象 getInnerInstance()
            Outer.Inner innerInstance = outer.getInnerInstance();
    
    Class Inner {
        public Inner getInnerInstance() {
            return new Inner();
        }
    
    }
      // 第三种方式(其实和第一种一样)
            new Outer().new Inner();
    
    

    静态内部类

    说明:静态内部类是定义在外部类的成员位置,并且有 static 修饰

    class Outer {
        static class Inner {
            
        }
    }
    
    1. 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员

    2. 可以添加任意访问修饰符,应为它的地位就是一个成员

    3. 作用域和其他的外部类成员一样,为整个类体

    4. 静态内部类--访问-->外部类(比如属性),【访问方式:直接访问所有的静态成员】

    5. 外部类--访问-->静态内部类,【访问方式:创建对象,再访问】

    6. 外部其他类--访问-->静态内部类

      // 方式一
      Outer.Inner inner = new Outer.Inner();
       // 方式二
              // 编写一个方法, 可以返回静态内部类的实例对象
              Outer.Inner inner1 = outer.getInner();	// 实例方法返回
      		Outer.Inner inner11 = Outer.getInner1(); 	// 静态方法返回
      
      static class Inner {
           public Inner getInner() {	// 可以是实例方法
              return new Inner();
          }
          public static Inner getInner1() { // 也可以是静态方法
              return new Inner();
          }
      }
      

本文作者:墨染启明

本文链接:https://www.cnblogs.com/ai135/p/17518890.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   墨染启明  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起