内部类:静态内部类

本文详细介绍了Java中静态内部类的特点及使用方式。静态内部类属于外部类而非特定对象,因此无需创建外部类实例即可访问静态内部类。文章通过具体代码示例展示了静态内部类如何访问外部类的静态成员,并强调了静态内部类无法访问外部类的实例成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package org.lgy.study.innerclass;

/*
静态内部类属于外部类本身,而不属于外部类的对象。
使用静态内部类时无需创建外部类的对象。
*/
public class StaticInnerClass{
	private String str1 = "non static str1 in outer";
	private static String str2 = "static str2 in outer";
	
	public void method1(){
		System.out.println("non static method1 in outer");
		//外部类的实例方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。
		//即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员,
		//必须使用静态内部类对象作为调用者来访问其实例成员。
		InnerClass in = new InnerClass();
		System.out.println("in.str1 = " + in.str1);
		System.out.println("InnerClass.str2 = " + InnerClass.str2);
		in.method1();
		InnerClass.method2();
	}
	
	public static void method2(){
		System.out.println("static method2 in outer");
		//外部类的类方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。
		//即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员,
		//必须使用静态内部类对象作为调用者来访问其实例成员。
		InnerClass in = new InnerClass();
		System.out.println("in.str1 = " + in.str1);
		System.out.println("InnerClass.str2 = " + InnerClass.str2);
		in.method1();
		InnerClass.method2();
	}
	
	public void method3(){
		System.out.println("non static method3 in outer");
	}
	
	public static void method4(){
		System.out.println("static method4 in outer");
	}
	
	/*
	静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
	即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。
	*/
	private static class InnerClass{
		//静态内部类里可以定义任何成员(成员变量、成员方法、静态成员、非静态成员)
		private String str1 = "non static str1 in inner";
		private static String str2 = "static str2 in inner";
		
		public void method1(){
			System.out.println("non static method1 in inner");
			//静态内部类的实例方法也不能访问外部类的实例成员变量
			//System.out.println("str1 in outer: " + StaticInnerClass.this.str1);
			System.out.println("str2 in outer: " + str2);
			//静态内部类的实例方法也不能访问外部类的实例成员方法
			//method3();
			method4();
		}
		
		public static void method2(){
			System.out.println("static method2 in inner");
			//静态内部类的静态方法也不能访问外部类的实例成员变量
			//System.out.println("str1 in outer: " + StaticInnerClass.this.str1);
			System.out.println("str2 in outer: " + str2);
			//静态内部类的静态方法也不能访问外部类的实例成员变量
			//method3();
			method4();
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值