首页 > 教程攻略 > ai教程 >Java 内部类创建、调用外部方法

Java 内部类创建、调用外部方法

来源:互联网 时间:2026-06-14 07:24:04

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();
    }
}

代码里 Innertest2() 方法中,Outer.this.test() 明确调用了外部类的 test() 方法。如果内部类里也有 test() 方法且被注释掉了,那么直接写 test() 就会指向内部类自己的方法(如果存在),而 Outer.this.test() 始终指向外部类。这个机制保证了在复杂的嵌套结构中,方法调用的路径是清晰的。