子 class 包含在父 class 中

Subclass contained in parent class

查看设置应用程序的一些源代码,我发现了一些类似于您在下面看到的东西,其中有原始 class 中提到的 class 的子 classes .这些 class 不是抽象的,也没有主体。

public class mySettings extends PreferenceActivity {
...
//Class definition
...
public static class myColorSettings extends mySettings {/*empty*/ }
public static class myConnectSettings extends mySettings {/*empty*/}
}

在实际的应用程序中,有按钮 "My Color" 和 "My Connect",每个按钮都会打开新的活动(如果屏幕是双窗格,则为片段)。

所以我有两个问题:如上所示,从面向对象编程的角度来看,在 class 本身中声明 subclasses 有什么用? 而我的第二个问题是,如果 classes 明明是空的,不是抽象的,但最终结果不是空的,那么这些空声明有什么用?

编辑 1

正如评论中所指出的,Android 存储库具有几乎相同的设置。见 link http://tinyurl.com/nbkv7zg (大约第 1070 行)

我认为这通常是一个糟糕的设计。

嵌套 classes 可以用作将它们组织在包中的替代方法,尤其是当它们的使用仅限于或仅在包含 class 的上下文中有意义时。如果在外面使用,重构出来。

由于两个 class 显然都是空的,它们完全是浪费,可以删除。相反,父 class 的每个实例都可以用于不同的 角色

mySettings colorSettings = new mySettings();
mySettings connectSettings = new mySettings();

顺便说一句。 class 的名称以小写开头是一种不好的做法

这是 Oracle 对您第一个问题的回答:

Why Use Nested Classes?

Compelling reasons for using nested classes include the following:

•It is a way of logically grouping classes that are only used in one place: If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.

•It increases encapsulation: Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.

•It can lead to more readable and maintainable code: Nesting small classes within top-level classes places the code closer to where it is used.

Source: http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

在没有看到项目代码的其余部分的情况下,我的最佳猜测是那两个 classes 虽然是空的,但必须根据 PreferenceActivity 父 class 的某些部分的要求进行声明。