内部类外部类(类中类)

类的五大成员 属性、方法、构造器、代码块、内部类 —————— 类有内部类,外部类,外部其他类


public class InterClass01 {//外部类
    public static void main(String[] args) {//静态内部类
        System.out.println("懒猪起床了");
    }
 }   
class Bell {//外部其他类
    void ring();
}

这里主要对内部类进行展开介绍
内部类有两大类共四种
(一:定义在外部类局部上)局部内部类、匿名内部类 -无类名
(二:定义在外部类成员位置)成员内部类、静态内部类 -static修饰

注意:内部类里的成员和外部类的成员重名时,采用就近原则,用 外部类.this.成员 来访问重名的外部类非静态成员。

①局部内部类-有类名

  1. 通常在方法、代码块中
  2. 不加访问修饰符,final可以修饰
  3. 作用域仅仅在定义它的方法或代码块中
  4. 本质还是个类,末尾要有;
  5. 当局部内部类里的成员和外部类的成员重名时,采用就近原则,用 外部类.this.成员 来访问重名的外部类成员

②匿名内部类 -无类名

  1. 匿名内部类-没有类名,通常在方法、代码块中;

  2. 特点:类只使用一次,后面不再使用

  3. 运行类型为匿名内部类的对象编译类型是接口,类名字在底层分配一般为外部类$1

  4. 接口 对象 = new 接口(){实现方法}; <==> class 匿名内部类 implements 接口 对象 = new 接口(){实现方法};

  5. 本质是个类,其实也可以看成一个对象

  6. 可以访问外部类所有的成员,包括private

③成员内部类

  1. 没有static修饰,在类的成员位置

  2. 可以用任意访问修饰符(public…)修饰

  3. 外部其他类访问成员内部类
    ①外部类.内部类 对象 = 外部类.new 内部类(); 通过对象调用内部类
    ②外部类.内部类 对象 = 外部类.方法; 用方法返回内部类

  4. 重名就近调用,外部类.this.成员 特指调用外部类重名成员

④静态内部类 -static修饰

  1. 成员位置,访问修饰符任意(public…),有static修饰

  2. 可以访问外部类所有静态成员,非静态成员不能访问

  3. 访问静态内部类
    ①外部类.内部类 对象 = new 外部类.内部类(); 通过对象调用内部类
    ②外部类.内部类 对象 = 外部类.方法; 用方法返回内部类

其中属匿名内部类最常用,也最重要,举个案例

public class Inter {
  public static void main(String[] args) {
      Hit hit = new Hit();
      hit.kit();//匿名内部类在方法中
  }
}
interface Csgo {//接口
  void play();
}
class Hit {
  public int n;
  public void kit() {
      Csgo cs = new Csgo() {//匿名内部类实现接口
          @Override
          public void play() {//实现接口方法
              System.out.println("内部类....");
          }
      };
      cs.play();
      System.out.println("cs的运行类型:" + cs.getClass());

}

在这里插入图片描述
这里通过getClass()方法查看运行类型也就是匿名内部类
匿名内部类的名字不需要我们设定,在运行程序时,底层会自动识别分配一个名字,一般为外部类+$1组成,就像这里的就叫Hit$1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值