java中,剩下的这两个内部类不太好理解!
发布日期:2021-05-14 12:59:38 浏览次数:40 分类:精选文章

本文共 1655 字,大约阅读时间需要 5 分钟。

Java 内部类详解:方法内部类与匿名内部类

导语

Java 的内部类分为四种:静态内部类、成员内部类、方法内部类和匿名内部类。前两种(静态内部类和成员内部类)我们在上一篇文章中已经详细讲解。今天我们将重点分析后两种内部类:方法内部类匿名内部类


方法内部类

定义与特点

方法内部类是指在一个方法内部定义的一个类。从语法上看,方法内部类没有修饰符(如 publicprivate 等),只能通过其所属方法的访问范围来使用。

代码示例

public class People {
private String name;
public People show() {
// 方法内部类
class Man extends People {
public void getMan() {
System.out.println("名称是:" + name);
System.out.println("执行内部类的方法");
}
}
// 创建内部类的对象
Man man = new Man();
// 调用内部类的方法
man.getMan();
return new Man();
}
}

代码分析

  • 定义方式:方法内部类的定义方式与成员内部类类似,但没有修饰符。
  • 访问范围:方法内部类的访问范围与该方法的访问级别一致。例如,若方法是 public,则内部类可以在类的外部访问;若方法是 private,则内部类只能在类的内部使用。
  • 使用场景:方法内部类通常用于在特定方法中封装特定的逻辑,但这种做法较少使用。
  • 注意事项

    • 方法内部类不能带有 publicprivatestatic 等修饰符。
    • 方法内部类的生命周期与其所属方法的生命周期一致。

    匿名内部类

    定义与特点

    匿名内部类是没有名字的内部类,通常用于在 new 表达式后面直接跟在父类或接口类型上,用于快速创建一个只需一次使用的对象。

    代码示例

    public class Man {
    public static void show() {
    // 匿名内部类
    People p = new People() {
    @Override
    public void eat() {
    System.out.println("正在吃饭……");
    }
    };
    // 调用匿名内部类的方法
    p.eat();
    }
    public static void main(String[] args) {
    Man man = new Man();
    man.show();
    }
    }

    代码分析

  • 定义方式:匿名内部类没有名字,直接在 new 后面紧跟接口或类名称。
  • 实现接口或继承类:匿名内部类必须实现一个接口或继承一个类。
  • 局限性:匿名内部类只能使用一次,不能作为外部类的成员。
  • 使用场景:匿名内部类通常用于简化代码,例如在 Comparator 接口中快速实现一个比较逻辑。
  • 示例解析

    在上述代码中,匿名内部类 People 实现了 eat() 方法,能够输出“正在吃饭……”。匿名内部类的生命周期与其引用变量 p 一致,一旦 p 被回收,匿名内部类也会被回收。


    总结

    • 方法内部类:在方法内部定义一个类,通常用于封装特定逻辑,但不常用。
    • 匿名内部类:没有名字的内部类,用于快速创建只需一次使用的对象,适合简化代码。

    下期内容

    关注【雄雄的小课堂】,获取更多高质量的技术内容!

    上一篇:Java中的TreeSet集合会自动将元素升序排序
    下一篇:为什么总是喜欢看我桌面呢?

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月25日 06时32分48秒