内部类和 外部类相互访问
内部类:
①静态内部类中可以有非静态的方法
②当内部类中有静态方法或者静态成员变量时,一定是静态内部类
1、外部类访问内部类:
内部类被static修饰:可以直接new
Inner in = new Inner();
内部类没有被static修饰:得先new出来外部类的实例,再new内部类的
Inner in = new Outer().new Inner();
2、内部类访问外部类:(外部类.this.变量)
3、外部类和内部类中的方法相互访问:
①外部类的静态方法test和非静态内部类的非静态方法voice的相互访问:
test访问voice 先new外类再new内类,再调方法
public class Outerclass { class Inner{ public void voice(){ System.out.println("voice()"); } } public static void test(){ new Outerclass().new Inner().voice(); } public static void main(String[] args) { //主函数调用test方法 test();13 } }
voice访问test 外类.this.方法(持有的外部类的引用)
public class Outerclass { class Inner{ public void voice(){ Outerclass.this.test(); } } public static void test(){ System.out.println("test()"); } public static void main(String[] args) { //主函数调用voice() Inner in = new Outerclass().new Inner(); in.voice(); } }
②外部类的非静态方法test和静态内部类中的非静态方法voice之间的相互调用
voic访问test
public class Outerclass { static class Inner{ public void voice(){ new Outerclass().test(); } } public void test(){ System.out.println("test()"); } public static void main(String[] args) { //主函数调用voice()方法 new Outerclass.Inner().voice(); } }
test访问voice
public class Outerclass { static class Inner{ public void voice(){ System.out.println("voice()"); } } public void test(){ //1、其他类访问外部类中的静态内部类的非静态方法 // new Outerclass.Inner().voice(); //2、此处的Outerclass中的test方法访问静态内部类中的非静态方法 new Inner().voice(); } public static void main(String[] args) { //主函数调用test方法 new Outerclass().test(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了