• 第十章 内部类


    一、连接到外部类

      当生成一个内部类对象时,此对象与制造它的外部对象之间就有了一种联系,所以它可以访问外部对象的所有成员,而不需要任何特殊条件。

    二、使用.this与.new

      如果你需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟(外部类名.this)。

      要想创建内部类对象,必须使用外部类对象来创建(外部类引用.new 内部类名())。

      在拥有外部类之前,是不能创建内部类的。这是因为内部类对象会暗暗的连接到创建它的外部类对象上。但是如果你创建的是静态内部类,那么它就不需要对外部类对象的引用

      

      由于内部类的对象保存有外部类对象的引用,因而不能在内部类中定义静态属性。换言之就是非静态内部类不能脱离外部类而独立存在。

    三、内部类与向上转型

      当将内部类向上转型为其父类,尤其是转型为一个接口的时候,内部类就有了价值。因为内部类的不可见性,可以很好的隐藏实现的细节

    四、在方法与作用域内的内部类

      1)你实现了某类型的接口,于是可以创建并返回对其的引用

      2)你要解决一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公用的。

        (1)在方法内部的类(局部内部类)

        外部是无法访问的,但是方法可以返回内部类的引用,但是必须向上造型为其接口。

        你可以在同一个子目录下的任意类中对某个内部类使用相同的标识,这并不会产生命名冲突。

      3)在任意的作用域内嵌入一个内部类

        只能在作用域中使用(例如if作用域)

    五、匿名内部类(实现工厂方法)

      new 类名(){。。。} :创建一个继承自类名的匿名类的对象。并使用默认构造器构造对象(也可以传参数进去)。

      内部类中想使用一个在其外部定义的对象,那么编译器会要求其参数引用是final的。(传递给父类的参数不需要是final的)

      内部类既可以实现接口,也可以继承,即使实现接口,也只能实现一个。

    六、嵌套类

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

    七、接口内部的类

      静态内部类,可以在接口中声明

      如果你想要创建某些公共代码,使得他们可以被某个接口的所有不同实现所公用,那么使用接口内部的静态内部类会很方便。

    八、为什么需要内部类

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

      每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类没有影响。内部类使得多继承变得完美。

      使用内部类的一些特性:

        1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

        2)在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。

        3)创建内部对象的时刻并不依赖于外部类对象的创建。

        4)内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

      

      闭包与回调

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

    九、内部类与控制框架

      应用程序框架就是被设计用以解决某类特定问题的一个类或一组类。要使用某个应用程序框架通常是继承或实现一个类。

      控制框架是一类特殊的应用程序框架,它用来解决响应事件的需求。主要用来响应事件的系统被称作事件驱动系统。

    十、内部类的继承

      因为内部类的构造函数必须连接到指向其外围类对象的引用,所以在继承内部类的时候,事情会变得有点复杂。问题在于,那个指向外围类对象的“秘密引用”必须被初始化,而在子类中不存在颗连接的默认对象

      必须使用特定的语法:默认构造不行,必须带上内部类的引用,并调用内部类的super();

    十一、内部类可以被覆盖吗

      内部类不能覆盖(覆盖类),明确继承某个内部类是可以的(覆盖方法)。

    局部内部类与匿名内部类

    使用局部内部类的理由:

       1)需要一个构造函数,或者需要重载构造函数,匿名内部类只能用于实例初始化。

       2)需要布置一个该内部对象。

  • 相关阅读:
    Android UI性能优化详解
    Android开发中一些被冷落但却很有用的类和方法
    Android开发:Translucent System Bar 的最佳实践
    让动画不再僵硬:Facebook Rebound Android动画库介绍
    Android Touch事件传递机制
    转载爱哥自定义View系列--Canvas详解
    Android最佳实践指南
    Android网络请求心路历程
    转载爱哥自定义View系列--文字详解
    ORM是什么?
  • 原文地址:https://www.cnblogs.com/jswang/p/7809899.html
Copyright © 2020-2023  润新知