我有一个类,我们称之为 LineGraph,它呈现一个折线图。我需要对它进行子类化,但是派生类只在一个地方使用,并且耦合到使用它的类。所以我正在使用内部类。
我看到有两种方法可以做到这一点:
匿名内部类
public class Gui {
LineGraph graph = new LineGraph() {
// extra functionality here.
};
}
命名内部类
public class Gui {
MyLineGraph graph = new MyLineGraph();
private class MyLineGraph extends LineGraph {
// extra functionality here.
}
}
我不是匿名内部类的粉丝,因为坦率地说,我只是觉得它看起来真的很丑。但是对于只在一个地方使用的子类,命名的内部类是不是有点矫枉过正了?公认的做法是什么?
原文由 Joe Attardi 发布,翻译遵循 CC BY-SA 4.0 许可协议
匿名内部类的一个优点是没有人可以在其他任何地方使用它,而可以使用命名内部类(如果仅由创建它的类私有)。这是一个很小的区别,但它确实意味着您可以保护内部类不被其他地方意外使用。
此外,使用匿名内部类可以让阅读您代码的任何人都注意到这一点——“这个类只在这里使用,没有其他地方使用。”如果您看到命名的内部类,有人可能会认为它会在类中的多个地方使用。
它们非常相似,所以这两点都不会改变游戏规则。我只是认为,如果您一次性使用匿名内部类,并在类中多次使用时命名内部类,这有助于清楚起见。