查看设置应用程序的一些源代码,我发现了一些可以解决您在下面看到的内容,其中包含原始类中提到的类的子类。这些类不是抽象的,没有正文。
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行)
答案 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父类的某些部分的要求声明。