简介
概念:可以将一个类的定义放在另一个类的内部定义,这就是内部类;
作用:1.完善多重继承(有时候程序设计中接口不能很好解决多重继承问题)
2.高内聚(比如集合里一些node节点内部类的设计)
特性:1.内部类可以有多个实例,每个实例都有自己的状态信息,与其他外围对象的信息相互独立;
2.在单个外部中,可以让多个内部类继承同一个类或实现同一个接口;
3.内部类提供了更好的封装,除了外部类,其他类都不能访问;
分类:成员内部类、局部内部类、匿名内部类、静态内部类;
内部类创建与外部类引用
1.内部类是个编译时的概念,一旦编译成功后,它就与外围类属于两个完全不同的类(当然他们之间还是有联系的);
2.在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$InnerClass.class;
成员内部类
简介:1.成员内部类是最普通的内部类,它是外部类的一个成员;
2.成员内部类可以访问外部类的所有属性和方法,外部类访问内部类需通过内部类实例来访问;
3.成员内部类中不能存在任何static的变量和方法;(非静态内部类都不能)
4.成员内部类是依附于外部类的,所以只有先创建了外部类才能够创建内部类;
局部内部类
简介:1.嵌套在方法和作用域内的内部类;(if条件语句内这些都算是作用域)
2.和成员内部类一样被编译,只是作用域发生了变化,只能在该方法或属性中被使用;
3.一般用于解决复杂问题下需要类来辅助解决又不想该类公共可用;(即限制于局部使用)
匿名内部类
简介:1.没有类声明(Class+类名),直接使用new生成一个对象引用的类;
2.匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效;
3.使用匿名内部类时,我们必须是继承一个类或者实现一个接口;(即使用场景)
4.匿名内部类中无构造函数;(无类名自然无构造,若需初始化可使用构造代码块“{}”)
5.当所在的方法的形参需要被内部类里面使用时,该形参必须为final;(编译时会创建形参的拷贝引用)
场景:在不想声明类,但又需要创建子类对象或实现类对象的时候;
优点:方便,不用起类名,使用简单;
缺陷:仅能被使用一次,如果内部类要多次使用,建议重新定义类;
(我的理解是:匿名内部类创建对象其实就是直接new出了没有类名的子类或实现类对象,而new的时候直接用父类的类名或接口名代替了子类或实现类的类名)
静态内部类
简介:1.使用static修饰的内部类我们称之为静态内部类;(也叫嵌套内部类)
2.静态内部类的创建不依赖于外部类;
3.静态内部类不能使用外部类的非静态成员变量和方法;
注:非静态内部类在编译完成之后会隐含地保存着一个指向外部类的引用,静态内部类没有;(上述2,3的原因)