为什么要使用内部类?
为什么要使用内部类?在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
作用: 接口只是解决了部分问题,而内部类使得多重继承的解决方案更完整。
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。
1.成员内部类
第一:成员内部类中不能存在任何static的变量和方法;
第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
第三:成员内部类可以访问外围类的属性和方法不管是private的,原因是成员内部类拥有了外围类的引用。但是外围类要访问成员累不累需要内部类的实例。
2.局部内部类
局部内部类作用于方法里面,所以作用域在方法的开始和结束之间。作用: 需要一个类来处理我们的问题,但是不希望这个类是公共的。方法里面的类定义的属性和方法出了方法就失效。
3.匿名内部类
1、 匿名内部类是没有访问修饰符的,因为不需要引用。
2、 new 匿名内部类,这个类首先是要存在的,这是必须的。
3、 所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final
因为外围类的变量和内部类的作用域不一样,那么他们的生命周期也不一样。内部类在使用外部类的局部变量时,实值就是在使用外部的局部变量,而内部类访问外部类的时候有可能外部类已经不在了,那么又要访问这个外围类,只能复制一份相同的外围类,如果不定义成final 那么就是保证对象一致性,一个不存在的对象是不可能再复活的。
4、 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。
4.静态内部类
1、 它的创建是不需要依赖于外围类的。
2、 它不能使用任何外围类的非static成员变量和方法。