Java内部类

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

 

P191)内部类能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类还拥有其外围类的所有元素的访问权。

 

P192)内部类的对象只能在于其外围类的对象相关的情况下才能被创建。构建内部类对象时,需要一个指向外围类对象的引用,如果编译器访问不到这个引用就会报错。如果要创建一个内部类的对象,你必须在new表达式中提供其外部类对象的引用,这时需要使用.new语法。要想创建内部类的对象,你不能按照你想象的方式,去引用外部类的名字,而是必须使用外部类的对象来创建内部类对象。

 

P193)如果你需要在内部类中生成对外部类的对象的引用,可以使用外部类的名字后面紧跟圆点和this。这样产生的引用自动的具有正确的类型,这一点在编译器就被知晓并受到检查,没有任何运行时开销。

 

P195)通过private内部类来实现接口,并将函数返回类型设为接口类型可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。

 

P201)嵌套类

将内部类声明为static,这总类被称为嵌套类。普通的内部类对象隐式的保存了一个引用,指向创建它的外围对象。然而,当内部类时static时,就不是这样了。嵌套类意味着:

  1. 要创建内部类的对象,并不需要其外围类的对象。
  2. 不能从嵌套类的对象中访问非静态的外围类对象。

普通内部类的方法与字段,只能放在类的外部层次上(???),所以普通的内部类不能由static数据和static字段,也不能包含嵌套类。但是嵌套类可以包含所有这些东西。

你放到接口中的任何类都自动是public和static的。因为类是static的,所以可以在接口中定义一个嵌套类(不需要显示声明成static)。你甚至能在内部类中实现其外围接口。如果你想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,那么这是一个很方便的方法。

posted @ 2017-06-20 22:24  TooLateToLearn!  阅读(168)  评论(0编辑  收藏  举报