use*_*206 46 java oop class inner-classes
我正在回顾java中内部类的概念.到目前为止,我已经理解和应用java内部类有一个链接或访问其外部/封闭类的方法和字段.
我的问题:
era*_*ran 14
内部类的经典用法是在容器内实现迭代器(例如,ArrayList,查找class Itr).所有容器想要暴露给世界其他地方的是Iterator.但是,它必须创建该迭代器的一些具体实现,可能熟悉容器的内部.使用内部类隐藏了实现,同时保持它接近容器的实现.在内部(即非静态)中,它被绑定到该容器的特定实例,从而允许它访问私有容器成员.
有几种类型的内部类 - 非静态嵌套类,本地类和匿名类.每个人的目的都有所不同,所以在询问内部课时,你应该说明你在说什么.
假设您指的是非静态内部类,我会说使用它们的原因与使用常规类(即抽象并将代码划分为逻辑单元)相同,但是没有理由将这些类的使用视为可见到世界其他地方.当然,您也可以将嵌套类设为public,在这种情况下,您可以将它们嵌套而不是独立,以便表达它们与外部类的紧密关系.
主要原因请参见Java 教程。
如果“助手类”是指仅供内部使用的东西,那么不,不一定。你可能想做类似的事情
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 类中的特定按钮之外,内部类不会在任何其他地方使用 。
| 归档时间: |
|
| 查看次数: |
31544 次 |
| 最近记录: |