父类中包含的子类

时间:2015-06-16 20:46:37

标签: java android preferenceactivity

查看设置应用程序的一些源代码,我发现了一些可以解决您在下面看到的内容,其中包含原始类中提到的类的子类。这些类不是抽象的,没有正文。

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

在实际应用中,有按钮"我的颜色"和#34;我的连接"每个都打开新的活动(如果屏幕是双窗格,则为碎片)。

所以我有两个问题:在面向对象的编程观点中,在类本身中声明子类的用法是什么 - 如上所示? 我的第二个问题是,如果类显然是空的而不是抽象的,但最终结果不是空的,那么这些空声明的用法是什么?

编辑1

正如评论中所指出的,Android repo的设置几乎相同。请参见链接http://tinyurl.com/nbkv7zg (约1070行)

2 个答案:

答案 0 :(得分:1)

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

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

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

中使用
mySettings colorSettings = new mySettings();
mySettings connectSettings = new mySettings();

顺便说一下。以小写字母开始一个类的名称是一种不好的做法

答案 1 :(得分:1)

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

  

为什么要使用嵌套类?

     

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

     

•这是一种逻辑分组仅在一个中使用的类的方法   place:如果一个类只对另一个类有用,那么它就是   合乎逻辑地将它嵌入该类中并将两者保持在一起。嵌套   这样的“帮助班”使他们的包更加简化。

     

•它增加了封装:考虑两个顶级类A和B,   其中B需要访问否则将被声明的A成员   私人的。通过在B类中隐藏B类,可以声明A的成员   私人和B可以访问它们。另外,B本身可以隐藏   来自外部世界。

     

•它可以带来更易读和可维护的代码:嵌套小   顶级类中的类使代码更接近它所在的位置   使用

     

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

在没有看到项目代码的其余部分的情况下,我最好的猜测是,这两个类虽然是空的,但必须按照PreferenceActivity父类的某些部分的要求声明。