来源:互联网 更新时间:2026-06-14 07:24
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() 始终指向外部类。这个机制保证了在复杂的嵌套结构中,方法调用的路径是清晰的。
《Off Campus》第二季官宣:这对CP还在,但不再是主角
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
客单价碾压宝马奥迪!极氪5月交付新车34377辆:连续4个月双增长
免费影视剧APP推荐
HBO 奇幻剧《龙之家族》第三季定档 6 月 22 日,最终预告片曝光喉道海战
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
DOTA2 TI时隔七年重返上海!门票6月10日开抢,国服享受优先购买!
抖音最火沙雕男生网名(精选100个)
网络热词聊污是什么意思
蒙古上单是什么梗
帅气继父网名女生可爱英文(精选100个)
金铲铲之战s17六暗星卡莎阵容玩法构筑指南
SpaceX狂揽AI人才,马斯克亲自面试且不看简历背景
免费看片软件下载地址推荐
免费看电影的软件推荐
阿里发布Qwen3.7-Max大模型,全球第五、国产第一
韦一敏是什么梗
三角洲行动卡战备怎么弄 三角洲行动卡战备攻略
晨字沙雕网名大全女生(精选100个)
帅到极致的网名女生霸气(精选100个)
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc