【Java】第10章 内部类

1.可以将一个类的定义放在另一个类的定义内部,这就是内部类


2.如果想在外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像在main()方法中那样,具体地指明这个对象的类型:OuterClassName.InnerClassName。


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


4.C++的嵌套类的设计只是单纯的名字隐藏机制,与外围对象没有联系,也有没有隐含的访问权。


5.内部类的对象只能在与其外围类的对象相关联的情况下才能被创建(在内部类是非static类时)。


6.如果你需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。这样产生的引用自动地具有正确的类型。


7.有时你可能想要告知某些其他对象,去创建其某个内部类的对象。要实现此目的,你必须在new表达式中提供对其他外部类对象的引用,这是需要使用.new语法。必须使用外部类的对象来创建该内部类对象。在拥有外部类对象之前是不可能创建内部类对象的。这是因为内部类对象会暗暗地连接到创建它的外部类对象上。


8.接口的所有成员自动被设置为public。


9.private内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。


10.可以在一个方法里面或者在任意的作用域内定义内部类。


11.如果定义一个匿名内部类,并且希望它使用一个在其外部定义的对象,那么编译器就会要求其参数引用是final的,否则就会编译错误。


12.匿名类没有命名构造器,但通过实例初始化,就能够达到为匿名类创造一个构造器的效果。


13.匿名内部类与正规的继承相比有些受限,因为匿名内部类既可以扩展类,也可以实现接口,但是不能两者兼备。而且如果是实现接口,也只能实现一个接口。


14.如果不需要内部类对象与外围类对象之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。


15.普通的内部类不能有static数据和static字段,也不能包含嵌套类。


16.一般来说,内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入其外围类的窗口。


17.内部类允许继承多个非接口类型。


18.如果拥有的是抽象的类或具体的类,而不是接口,那么就只能使用内部类才能实现多重继承。


19.闭包是一个可调用的对象,它记录了一些信息,这些信息来自与创建它的作用域。


20.两个内部类是完全独立的两个实体,各自在自己的命名空间内。


原文地址:https://www.cnblogs.com/haoaina521/p/3332119.html