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