java内部类的小见解

**

关于JAVA内部类的小见解

**

  1. 非静态内部类
    特点
    1、外部类不能直接访问非静态类内部成员
    2、创建非静态内部类对象时,要先创建外部类对象再创建内部类对象
    3、非静态内部类不能定义静态成员、方法以及代码块
public class Test_innerclass {
	public static void main(String arg[]) {
		outer.inner nner = new outer().new inner();
		//说明非静态内部类必须寄存在一个外部类对象下。所以创建一个非静态类对象时一定要先创建外部类对象
		nner.testinner();
}
class outer{
	int b = 5;
	void a() {
	System.out.println("444444");
	}	
	/*外部类不能直接访问非静态内部类的成员
	System.out.println("调用内部类对象"+inner.b);
	
	void testinner2() {
		tastinner();
	}
	*/
	class inner{
		/*非静态类不能定义静态成员、方法以及静态块
		static int d = 5;
		static void way() {
		}
		static {
		}
		*/
		int b = 3;
		public void testinner() {
			int b = 10;
			System.out.println("答案是="+outer.this.b);
			System.out.println("答案是="+this.b);
			/*改成inner.b或者outer.inner.b会出现编译错误
			System.out.println("答案是="+inner.b);
			System.out.println("答案是="+outer.inner.b);
			这个this本身的含义还不知道代表啥*/
			System.out.println("答案是="+b);
		}
	}
}
  1. 静态内部类
    特点
    1、外部类能够调用静态内部类的静态成员
    2、静态内部类的方法不能调用外部类的成员
    3、静态内部类相当于外部类的一个成员,所以可以直接创建静态内部类对象
    迷惑点
    1、在静态内部类中设置了一个静态成员b,当在内部类方法中调用时,只能用this.b,而用inner.b或者outer.inner.b时会报错,那么这个this这里指代的是什么呢
public class Test_innerclass {
	public static void main(String arg[]) {
		outer2.inner2 nner2 = new outer2.inner2(); 
		//说明静态内部类相当于外部类一个成员,所以不需要先生成外部类对象再来生成内部类对象
		nner2.testinner();
		}
}
class outer2{
	int b = 5;
	void a() {
	System.out.println("444444"+ inner2.b);
	//说明外部类的方法能调用静态内部类的静态成员
	}
	static class inner2{
		static int b = 3;
		public void testinner() {
			int b = 10;
			/*静态内部类方法不能调用外部类的成员
			System.out.println("答案是="+outer2.this.b);
			*/
			System.out.println("答案是="+this.b);
			/*改成inner.b或者outer.inner.b会出现编译错误
			System.out.println("答案是="+inner.b);
			System.out.println("答案是="+outer.inner.b);
			这个this本身的含义还不知道代表啥*/
			System.out.println("答案是="+b);
		}
	}
}
  1. 匿名内部类
    特点
    1、不需要定义一个新类来继承接口
    2、只能调用一次
    3、接口的实现是在调用接口方法的地方而不是在main函数里
public class Test_innerclass {
	public static void main(String arg[]) {
		Test_innerclass.test(new A(){
			public void aa() {
				System.out.println("55555");
			}
			//说明实现接口A,将内容返回给test(A a),从而不需要定义一个实类来实现接口
		});
	interface A {
		void aa();
	}
	public static void test(A a) {
		a.aa();
	}
}

4、局部内部类
特点
1、只能在方法中使用,方法中创建,出了方法就无效了

public class Test_innerclass {
	public static void main(String arg[]) {
		Test_innerclass b = new Test_innerclass();
		b.test();
	}
	public void test() {
		class inner3{
			int b = 10;
			void show() {
				System.out.println("砥砺前行"+b);
			}
		}
		new inner3().show();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值