TIJ C10 内部类

TIJ Chapter 10 Inner Class

Inner Class

基本定义:将一个类放在另一个类的内部。

内部类的创建与实例化

  • 对于普通的内部类,要引用内部类的格式是OuterClass.InnerClass,此为内部类的外部类名。
  • 想要实例化一个内部类,需要首先实例化该内部类的外部类OuterClass out, 然后用该外部类的实例来调用内部类的构造函数:OuterClass.InnerClass in = out.new InnerClass();
  • 如果内部类实现了接口或者继承了外部类的话,可以用生成器来实例化,这时可以将内部类私有化,但是记住生成器的返回值要用接口或者原父类的类型,详见下文

外部类的访问权

  • 内部类有对其外部类的全部访问权,包括private的外部类域和方法。
  • 如果需要在内部类里生成对外部类对象的引用,可以使用OuterClass.this的形式。 只使用this的话引用的是内部类自己

内部类向上转型

私有内部类在生成器中返回时之所以要进行向上转型,是为了可以实例化的过程,否则的话因为无法访问私有内部类的名字,导致无法实例化。
匿名内部类的生成器同理。

方法和作用域内的内部类

也可以在方法和作用域内加入内部类,<< 但是具体有什么用还不清楚 >>。

匿名内部类

匿名内部类没有构造器,只能通过getter方法的方式来实例化

  • 应用:由于有匿名内部类,可以优雅地通过在外部类内部靠匿名类实现工厂接口的方式来生成单例工厂。

静态内部类

静态内部类没有对外部类的访问权,甚至不属于外部类的一部分。

  • 应用:可以创建某些公共代码,使得他们可以被某个接口的所有不同实现使用,这些公共代码就是以静态内部类的方式存在于接口中的。

内部类的用途

  • 通过内部类可以让多个内部类以不同的方式实现同个接口或继承同个基类。
  • 可以在让父类不参与继承或实现接口而让内部类进行。
  • 可以间接实现多继承。

学习情况总结

  • 知识点难度:4
  • 掌握程度:3
  • 没有彻底弄懂的部分在P205 - P215 以后要回头再好好看一遍。

posted on 2017-04-13 20:34  hazelnut  阅读(76)  评论(0)    收藏  举报

导航