我刚刚开始学习为Android开发,我来自严格的C ++背景。我发现Java不支持多重继承,但是我们真的必须为每个新的Activity创建一个单独的.java文件吗?
我有一个TabActivity,另外还有3个Activity组成了标签。我想在其中一个标签上创建一个列表视图,但我开始感到困惑。我是否需要制作另一个扩展ListActivity的.java文件?如果我需要为每个活动创建一个单独的.java文件,我甚至可以看到一个相对较小的应用程序变得非常大。
SIDE NOTE
如果我想将ListView添加到我的某个标签中,我该怎么做?到目前为止,我找到的任何内容都没有提及如何向其他活动添加新活动。
答案 0 :(得分:1)
Java不支持抽象或普通类的多重继承,只支持接口。
您可以做的是创建扩展特定Activity
的抽象类,并继续创建抽象类,直到您拥有一个继承所有活动功能的类。
或者,有一个继承多个接口的类。
答案 1 :(得分:1)
如果使用IDE执行此操作,则创建大量文件的开销要小得多。
但是,有几种方法可以在同一个文件中包含多个类。这包括a)使用内部/嵌套类b)匿名类c)枚举d)包本地类。
如果跨多个文件传播类的定义,那么你唯一不能做的就是轻松。
答案 2 :(得分:1)
Java不支持多重继承
解决方法是使用接口
但是我们真的必须为每个新的Activity
创建一个单独的.java文件
不,如果您的活动可以在现有课程中完成,或者可以在现有课程中进行分类。 Java是围绕为每个活动创建类而构建的。
答案 3 :(得分:1)
Java不允许多重继承。但它确实允许实现多个interface
。您不需要为每个class
创建单独的文件(尽管这是一个很好的做法)。您可以将子类封装在文件的主class
中。
ListView
可以简单地extend
编辑,您可以在xml等中使用相应的扩展类。
答案 4 :(得分:1)
其他答案给出了关于界面的好点,这可能是你正在寻找的更多。但是,有关更多信息,您不必为每个新类创建新的.java文件,而是alternatives。但是,请记住,更多的课程不一定是坏事。你的选择是......
嵌套类:
public class A {
public/private class B {
}
}
B的实例可以访问A的私有变量,但是如果没有A的实例就不能构造(这是一种常用于按钮处理程序的方法等)。
嵌套静态类:
public class A {
public/private static class B {
}
}
B的实例无法访问A的私有变量,但它们不需要A的实例才能构造。如果B被声明为公共,则可以在任何地方实例化B的实例,或者如果B被声明为私有,则可以仅在A的方法中实例化。
匿名类:
public class A {
private void setupLayout() {
...
button.addClickListener(new ActionListener() {
public void actionPerfored(ActionEvent e)
{
handleClick();
}
});
}
}
这种奇怪的语法创建了一个没有名称和函数的类,它与嵌套类相同(例如,可以访问私有变量)。它是编写嵌套类的另一种形式,有时会更短,但会导致非常奇怪的语法。
答案 5 :(得分:0)
Java确实支持多重继承,如果你只是将基类抽象化并称之为interface
而不是class
。
答案 6 :(得分:0)
您只需在XML中声明ListView
并在Activity
中调用它,无需单独ListActivity
,仅适用于ListView
。当您的整个Activity
为ListView
时。
根据对更多课程的担忧,这不是一件坏事。更多的类意味着更多的面向对象,但并不严格(一切都有限制)
由于死亡钻石的问题,多重遗传被认为是不好的。因此,解决方法是在Java中使用Pure Virtual Classes
称为Interface
(接口意味着Objective-C中的普通类)。
我建议你阅读HeadFirst Java second edition,以便更好地掌握术语及其用法。这对初学者来说是一本好书。