内部阶级的目的是什么?

use*_*206 46 java oop class inner-classes

我正在回顾java中内部类的概念.到目前为止,我已经理解和应用java内部类有一个链接或访问其外部/封闭类的方法和字段.

我的问题:

  1. 什么时候应该创建或定义内部类?
  2. 内部类被认为是"助手类"吗?
  3. 你有什么指标来建立一个内部阶级,以及它们的另一个目的是什么?

kos*_*osa 43

内部类最适合用于对一个地方使用的类进行逻辑分组.例如,如果要创建仅由封闭类使用的类,则为此创建单独的文件没有意义.相反,你可以将它添加为"内部类"

根据java教程:

使用嵌套类的令人信服的理由包括:

  • 这是一种逻辑分组仅在一个地方使用的类的方法.
  • 它增加了封装.
  • 它可以使代码更具可读性和可维护性.


era*_*ran 14

内部类的经典用法是在容器内实现迭代器(例如,ArrayList,查找class Itr).所有容器想要暴露给世界其他地方的是Iterator.但是,它必须创建该迭代器的一些具体实现,可能熟悉容器的内部.使用内部类隐藏了实现,同时保持它接近容器的实现.在内部(即非静态)中,它被绑定到该容器的特定实例,从而允许它访问私有容器成员.

几种类型的内部类 - 非静态嵌套类,本地类和匿名类.每个人的目的都有所不同,所以在询问内部课时,你应该说明你在说什么.

假设您指的是非静态内部类,我会说使用它们的原因与使用常规类(即抽象并将代码划分为逻辑单元)相同,但是没有理由将这些类的使用视为可见到世界其他地方.当然,您也可以将嵌套类设为public,在这种情况下,您可以将它们嵌套而不是独立,以便表达它们与外部类的紧密关系.

  • 非静态嵌套类也称为内部类.它不是一种内在阶级. (2认同)

Fre*_*Foo 5

  1. 主要原因请参见Java 教程

  2. 如果“助手类”是指仅供内部使用的东西,那么不,不一定。你可能想做类似的事情

    class Outer {
        private static class Inner implements InterestingInterface {
            // whatever
        }
        public InterestingInterface make_something_interesting() {
            return new Inner();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在这里,Inner从外部世界确实可以看到它的实例的意义上来说,它不是一个“帮助类”,但它的实现是完全隐藏的——外部世界只知道它得到了一些实现 的对象InterestingInterface


小智 5

作为一般规则,对象应该设计为具有单一职责(高度内聚)。换句话说,任何设计良好的对象都应该执行单一的连贯任务。这将被认为是面向对象设计的最佳实践。

然而,有时,开发人员可能会设计一个需要单独的 专用类才能工作的类。这个单独的专门类可以被视为辅助类

如果辅助没有被任何其他类使用,那么它将被视为内部类的主要候选者。

正如上面ncmathsadist所引出的,内部类使用的一个例子是事件处理程序的实现。

例如,在设计图形用户界面 (GUI) 时,开发人员可能创建了一个按钮该按钮在用户按下后执行特定任务。

该按钮需要一个事件处理程序侦听何时按下该特定按钮。

在这种情况下,为按钮创建事件处理程序作为内部类将是最佳实践,因为除了GUI 类中的特定按钮之外,内部类不会在任何其他地方使用 。