zoukankan      html  css  js  c++  java
  • 内部类实例

    • Q: 内部类为什么如此重要?

    • A: 内部类的存在使得我们可以在一个外部类里面实现多个相同的接口。


    • Q: 内部类为什么要把一个接口实现多次?

    • A: 例如GUI事件处理,设想有3个按钮,每个按钮有不同的用途,那么创建3个内部类,都实现同样的接口 ActionListener,这就意味着每一个类可以实现自己独有的 actionPerformed() 方法。


    • Q: 事件处理句柄是使用内部类的唯一原因吗?

    • A: 当然不,举这个例子是因为事件处理句柄很适合。每当你想要一个独立的类,但是它有时另外一个类的一部分,那么内部类就是最好的选择,某些时候也是唯一的选择。


    • Q: 还是有点懵,如果你想要内部类作为外部类的一部分,为什么优先使用单独的类?为什么不是优先把内部类的代码直接放在外部类的代码中呢?

    • A: 我刚刚给你举的例子是同一个接口有多个实现。但是当你没有使用接口的时候,你依然可以使用多个类,因为每个类代表不同的事物。


    • Q: 对了,我刚刚想到OO设计的思想是复用和可维护。有两个独立的类,两个都可以独立的修改和使用,这要比代码柔和到一起要好。但是对于内部类,最终还是要和一个真实的类打交道,对吧?外部的类才是唯一的可重用的,并且对其他每个人都是独立的内部类严格来说并不可重用。事实上,我非常多次听说它们是不可重用的-没用的。

    说的对,内部类并不可重用,事实上某些时候根本不能重用,因为它和外部类的实例变量和方法紧密地关联在一起。但是它。。。


    • Q: 这完全证明我的观点了。如果他们不可重用,为什么要单独使用类呢?除了接口问题,对我而言他们仅仅是权宜之计。

    • A: 正如我所说,你的考虑IS-A 和多态。

    因为外部类和内部类得通过不同的IS-A 测试。以多态GUI监听器为例,按钮监听器注册方法的的参数类型是什么?话句话说,传递给方法 addActionListener()的参数是什么(类还是接口类型)?


    • Q: 必须要传递一个监听器。通常是一个实现了特定的监听器的接口,在这种情况下是ActionListener。当然我们都知道这一点,你想证明什么?

    • A: 多态性,例如某个方法只接受一个特定的类型的参数,某个可以为 ActionListener 传递 IS-A 测试。但是,问题就来了,万一你的类就需要作为某种 IS-A 测试,那是一个类类型而不是接口?


    • Q: 为什么不让你的类直接继承你想要用的类呢?子类不就是这么用的吗?如果B是A的子类,那么所有需要A的地方,都可以用B来替代。这就是那一套pass-a-Dog-where-an-Animal-is-the-declared-type

    • A: 是的,的确如此!万一你需要传递 IS-A 测试给两个不同的类呢?多个类但是不在同一个继承级别里呢?


    • Q: 额,你真是。。。好吧,我大概明白了。可以实现多个接口,但是只能继承一个类。
  • 相关阅读:
    C#
    C#
    ssh学习笔记
    (已解决)Could not open '/var/lib/nova/mnt/*/volume-*': Permission denied
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    如何在linux下安装idea
    The system has no LUN copy license
    调整mysql数据库最大连接数
    mysql数据库编码问题
    cinder支持nfs快照
  • 原文地址:https://www.cnblogs.com/LinTeX9527/p/7346729.html
Copyright © 2011-2022 走看看