在java中,你可以拥有内部类。如果对此有任何好处,我会从设计角度感到好奇。
我最初的想法是,将一个单独的文件与类分开可以更清晰地将事物分成可重用的模块。通过这样做,如果其他类希望使用其他类,他们也可以创建自己的实例。对我而言,似乎避免使用内部类可能是一个更好的可扩展性和代码重用设计,并且在处理新项目时,通常很难判断该类是否会被重用...所以我觉得有必要单独的课程是要走的路。
我问这个问题是因为我接手了一个项目,其中有很多......这让我觉得以前的开发人员可能只是懒惰或不熟悉IDE。但我想确保我不会错过这些内部类的任何好处。如果有好处可以有人让我知道,然后我可以确认以前的开发人员是否正在利用这些好处。
答案 0 :(得分:16)
当内部类不在包含类之外使用时它们是好的 - 它是一种减少类膨胀的方法。作为一般规则,这是我使用它们的唯一时间。
非静态内部类也可以访问包含实例的私有字段。
答案 1 :(得分:3)
内部类对以下内容很有用:
隐藏实施细节。
使项目视图更简洁,更容易理解。
添加相关代码的逻辑分组。
答案 2 :(得分:2)
我想到的内部类的一个很好的用法是java.util.ArrayList,它将迭代器实现隐藏到private inner classes
中。除非在列表对象上调用iterator()
或listIterator()
,否则无法创建它们。
这样,Iterator
的{{1}}和ListIterator
实现与其相关的类和方法分组,以提高可读性(实现非常简短),但隐藏在其他人之外。
他们无法声明ArrayList
,因为他们需要访问其封闭的实例对象。
static
答案 3 :(得分:2)
非静态内部阶级:
1)内部类将用于在外部类上执行某些任务并返回输出
。因此,它将确保创建外部类对象以访问它
2)内部类只针对外部类,对外界没有用。所以不需要考虑代码重用。
例如_1)内部类的最佳示例是iterator
实现集合框架。 Set(AbstractCollection.java)和List(AbstractList.java)将使用不同的迭代器内部类实现。
- >我们可以重用内部类代码。例如,Arraylist和Vector都使用private class Itr
java.util.AbstractList
内部类的实现。
静态内部阶级:
1)静态内部类不依赖于外部类对象;但它特定于外层阶级。它不会暴露给独立,因为它只针对外部类。所以没有代码重用。
2)它有一组对所有对象共同(共享)的方法(类级别)
3)
例如1)使用静态内部类的Sigleton对象回溯。
例如2)构建器模式
例如,一个类的比较器实现。
答案 4 :(得分:0)
内部类非常重要,它可以帮助您实现非常整洁的封装需求,您的基类也可以从许多类继承(例如实现抽象处理程序)。每个程序员都可以学习如何在Java中使用内部类,这是非常有用的。