嵌套类(静态内部类)和普通内部类的用法和总结

静态内部类 又叫 嵌套类

总结:

1、普通内部类(非嵌套类或非静态内部类)  不允许有 静态字段和方法
2、静态内部类(嵌套类) 不能直接 访问外围类的  非静态成员   但可以通过外围类的对象去访问外围类的 非静态成员

3、创建普通内部类时,必须通过外围类对象,普通内部类(不含 嵌套类) 将隐式保存外围类对象的引用  所以 能透明(直接)访问外围类的所有成员(包括private) 通过 外围类名.this  访问这个 外围类对象

4、匿名内部类 内部若要使用 外部定义的对象  这个外部对象必须是final

5、匿名内部类 必须 继承一个类 或 实现一个接口  



public  class Test{
	public static void main(String args[])
	{
		Test t=new Test();
		C c=t.new C();//外围类的 静态方法中  创建普通内部类
		c.fc(6);
		System.out.println("t.c:"+t.c);
	//	c.fc1(7);
		System.out.println();
		D d=new D();
		d.fd(6);
		d.fd1(7);
		
		
		System.out.println();
		t.test();
	}
	
	void test(){
		C c=new C();//外围类的 非静态方法中  创建内部类
		c.fc(6);
	//	c.fc1(7);
		System.out.println();
		D d=new D();
		d.fd(6);
		d.fd1(7);
	}
	class C
	{
		int k1=0;
	//	static int k=0;//普通内部类(非嵌套类 即静态内部类)  不允许有 静态字段和方法
		void fc(int s){
			++c;
			++cc;
			System.out.println("普通内部类(非静态)Inner C_非静态方法fc:"+s);
			f(c);
			f1(cc);
		}
		
		//普通内部类(非嵌套类 即静态内部类)  不允许有 静态字段和方法
		/*static void fc1( int s){ 
		//	++Test.this.c;
		//	++cc;
			System.out.println("Inner C_静态方法fc1:"+s);
		//	f(c);
			f1(cc);
		}*/
	}
	static class D
	{
		int d=1;
		static int d2=99; 
		void fd(int s){
			System.out.println("静态Inner  D_非静态方法fd:"+s);
			++cc;
			f1(cc);
			Test t=new Test();
			//++c;//静态内部类(嵌套类) 不能直接 访问外围类的  非静态成员
			++t.c;// 不能直接访问  但可以通过外围类的对象去访问外围类的 非静态成员
			t.f(t.c);//不能直接访问  但可以通过外围类的对象去访问外围类的 非静态成员
		}
		static void fd1(int s){
			System.out.println("静态Inner  D_静态方法fd1:"+s);
			++cc;
			f1(cc);
	//		++c;//静态内部类(嵌套类) 不能直接 访问外围类的  非静态成员
	//		f(c);
		}
	}
	int c=1;
	static int cc=11;
	void f(int s){
		System.out.println("外围类Class Test非静态方法f:"+s);
	}
	static void f1(int s){
		System.out.println("外围类Class Test.-静态方法f1:"+s);
	}

}

class A{
	public static void main(String args[]){
		Test t=new Test();
		Test.C c=t.new C();//其他类的 静态方法中  创建普通内部类
		c.fc(6);
	//	c.fc1(7);
		System.out.println();
		Test.D d=new Test.D();//其他类的 静态方法中  创建静态内部类
		d.fd(6);
		d.fd1(7);
		
		System.out.println();
		A a=new A();
		a.g();
	}
	void g(){
		Test t=new Test();
		Test.C c=t.new C();//其他类的 非静态方法中  创建普通内部类
		c.fc(6);
	//	c.fc1(7);
		System.out.println();
		Test.D d=new Test.D();//其他类的 非静态方法中  创建静态内部类
		d.fd(6);
		d.fd1(7);
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值