java内部类

1、定义

      将一个类的定义放在另一个类的内部,这就是内部类。

2、内部类与外部类的链接

      内部类可以访问其外部类的素有成员。

      当某个外部类创建内部类时,内部类就会捕获一个指向外部类对象的相关引用,就是用该引用来访问外部类的成员。

      注意:当内部类是static时无法访问外部类的非static域,内部类只用得到外部类的引用时才能访问外部类成员,然而对于静态的内部类,外部类甚至都没有创建自身的对象,所以也就不能访问。这可以解释在其他类创建内部类对象的方式。

3、.this与.new

      在内部类使用OutClassName.this可以生成对外部类对象的引用。

      创建非静态内部类之前需要先创建外部类的对象

            Outer o = new Outer();

            Outer.Inner in = o.new Inner();

      创建静态内部类(嵌套类)时不需要外部类的对象

            Outer.Inner in = new Outer.Inner();

      非静态内部类不能有static数据和static字段

class Outer{
	private int a=1;
	class Inner{
		public void g() {
			int c = Outer.this.a;
			Outer o = Outer.this;//对外部类对象的引用
			o.a=2;
		}
		public void f() {
			System.out.println("Inner.f() a="+a);
		}
	}
	public void f() {
		System.out.println("Outer.f() a="+a);
	}
}
public class InnerTest {
	public static void main(String[] args) {
        //非静态的内部类必须要与外部类建立起关联(捕获外部类对象的引用),所以先要有外部类的对象
        //才能创建内部类
		Outer o = new Outer();
		Outer.Inner a = o.new Inner(); 
		o.f();
		a.f();
		a.g();
		o.f();
		a.f();
	}
}
//output:
//Outer.f() a=1
//Inner.f() a=1
//Outer.f() a=2
//Inner.f() a=2

4、匿名内部类

      匿名内部类语法的实质是:创建一个继承自基类的匿名类的对象,通过new表达式返回的引用被自动转型为对基类的引用。例如:

class Outer{
	private int a=1;
	class Inner{
	    public void f() {
			System.out.println("Inner.f() a="+a);
		}
	}
	public Inner g() {
		return new Inner(){
			public void f() {
				System.out.println("nf()");
			}
		};
	}
}
public class InnerTest {
	public static void main(String[] args) {
		Outer o = new Outer();
		Outer.Inner a = o.g();
		a.f();
	}
}
//output:
//nf()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值