java 内部类

顾名思义,内部类是在类里面的类,它具有名字隐藏和组织代码的模式,大致的代码结构如下:

public class Outer {
	public Outer() {
		System.out.println("out class");
	}

	class Inner {
		public Inner() {
			System.out.println("inner class");
		}
	}
}

创建外部类对象,是内部类对象存在的先决条件(除了static 内部类)

1,当生成一个内部类对象的时候,此对象与制造它的外部类(对象)之间就有了一种联系,内部类指向外部对象的指针,所以它能访问外部对象的所有成员,而不需要任何特殊条件,内部类还拥有外围类的所有元素的访问权。

public class Outer {
	//外部类参数
	private Object[] outData = new Object[10];
	public Outer() {
		System.out.println("out class");
	}

	class Inner {
		public Inner() {
			System.out.println("inner class");
		}
		public void outputData(){
			for(Object object:outData)
				System.out.println(object.toString());
		}
	}
}

2,内部类中的this,是指向内部类的,要想调用外部对象的this,则在外部类名字后面+.this;

    class Inner {
		public Inner() {
			System.out.println("inner class");
		}
		public void outputData(){
			for(Object object:outData)
				System.out.println(object.toString());
		}
	    public Inner getInner(){
		   return this;
	    }
	    public Outer getOuter(){
		   return Outer.this;
	    }
	 }

3,匿名内部类:如果定义了一个匿名内部类,并且希望它使用一个在其外部定义的对象,那么编译器会要要求其参数引用是final的。

4,为啥需要内部类?

内部类继承某个类或实现某个接口,内部类的代码操作创建他的外围类对象。内部类使得多重继承的解决方案变得完整,内部类可以实现多种继承。

(1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

(2)在单个外围类中,可以让多个内部类以不同的方式事项同一个接口,或者继承同一个类。

(3)创建内部类对象的时刻并不依赖外围类的创建。

(4)内部类并没有 Is-a 的关系,它就是一个 独立的实体。

5,什么是闭包?


class Outer {
    private int outi = 10;

    class inner {
        public int add() {
            int inni = 20;
            return inni + outi;
        }
    }
}

类似与这种,内部方法调用依赖于外面的数据,就是一种闭包,最大的作用就是函数的 封装;

 

转载于:https://my.oschina.net/u/3300098/blog/852324

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值