游乐游手机版
首页/AI教程/文章详情

Java内部类如何创建并调用外部方法

时间:2026-06-15 15:48
内部类对象创建必须依赖外部类实例,使用outer newInner()语法。当方法名冲突时,需用Outer this method()显式调用外部类方法,否则默认调用内部类自身方法,可能引发无限递归。此外,内部类隐式持有外部类引用,可访问其私有成员。

在 JDK 1.8.0 环境下,掌握 Java 内部类的正确使用方式非常关键。下面重点介绍如何创建内部类实例,以及从内部类中如何准确调用外部类的方法,避免常见误区。

创建内部类对象

实例化内部类时,必须先存在一个外部类对象,语法清晰简洁:

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() 始终指向外部类。这一机制确保了在多层嵌套结构中,方法调用的路径清晰可控,有效避免混淆。

来源:https://developer.aliyun.com/article/704710
上一篇蓝耘MaaS与海螺AI强强联合,重塑智能应用新版图 下一篇PyODPS DataFrame代码运行位置详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网