Java内部类创建与外部方法调用实战指南

2026-06-14阅读 0热度 0
其他

在 JDK 1.8.0 中操作内部类时,需注意对象创建与外部方法调用的细节。下面首先演示内部类实例的构建方式,再说明从内部类中安全调用外部类方法的正确做法。

内部类实例的创建方式

实例化内部类时必须持有外部类对象的引用,语法如下:

Outer outer = new Outer(1L,"fater");
Outer.Inner inner = outer.new Inner(2L,"son");

需要留意 outer.new Inner(...) 这种写法——每个内部类实例都绑定到特定外部类对象上,形成强关联。

从内部类调用外部类方法的正确姿势

一个常见的误区:当内部类与外部类方法名不冲突时,内部类可直接调用外部类方法;若出现同名方法(例如同时存在 test()),则必须通过 Outer.this.method() 显式指定外部类版本,否则默认调用内部类自身方法,极易导致无限递归异常。

以下完整示例可以清晰说明这一点:

public class Outer {
    private Long id;
    private String name;

    public Outer(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public void test(){
        System.out.println("Outer " + this.id + "--" + this.name);
    }

    class Inner{
        private Long id;
        private String name;

        public Inner(Long id, String name) {
            this.id = id;
            this.name = name;
        }

        //public void test(){
        //    System.out.println("Inner " + this.id + "--" + this.name);
        //    System.out.println("my fater is");
        //    //test(); // 会调用内部类的test()方法,无限循环报错
        //    Outer.this.test(); // 调用外部类方法
        //}

        public void test2(){
            System.out.println("Inner " + this.id + "--" + this.name);
            System.out.println("my fater is");
            Outer.this.test();
            //test(); // 两种方式皆可,调用外部类方法
        }
    }

    public static void main(String[] args) {
        Outer outer = new Outer(1L,"fater");
        Outer.Inner inner = outer.new Inner(2L,"son");
        inner.test2();
    }
}

示例中 Inner.test2() 通过 Outer.this.test() 精准调用了外部类的 test() 方法。如果内部类中同样定义了 test()(但此处被注释),直接写 test() 会优先匹配内部类版本;而 Outer.this.test() 则始终指向外部类。这种机制确保了嵌套环境下方法调用的明确性。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策