Java类与C ++类

时间:2011-06-20 10:47:27

标签: java c++ android class-design

我刚刚开始学习为Android开发,我来自严格的C ++背景。我发现Java不支持多重继承,但是我们真的必须为每个新的Activity创建一个单独的.java文件吗?

我有一个TabActivity,另外还有3个Activity组成了标签。我想在其中一个标签上创建一个列表视图,但我开始感到困惑。我是否需要制作另一个扩展ListActivity的.java文件?如果我需要为每个活动创建一个单独的.java文件,我甚至可以看到一个相对较小的应用程序变得非常大。

SIDE NOTE

如果我想将ListView添加到我的某个标签中,我该怎么做?到目前为止,我找到的任何内容都没有提及如何向其他活动添加新活动。

7 个答案:

答案 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。当您的整个ActivityListView时。

根据对更多课程的担忧,这不是一件坏事。更多的类意味着更多的面向对象,但并不严格(一切都有限制) 由于死亡钻石的问题,多重遗传被认为是不好的。因此,解决方法是在Java中使用Pure Virtual Classes称为Interface(接口意味着Objective-C中的普通类)。 我建议你阅读HeadFirst Java second edition,以便更好地掌握术语及其用法。这对初学者来说是一本好书。