Java Classes versus C++ Classes
Java Classes versus C++ Classes
我刚开始学习为Android开发,我来自严格意义上的C++背景。我发现Java不支持多重继承,但我们真的必须为每个新的活动创建一个单独的.Java文件吗?
我有一个TabActivity,还有3个Activity组成了选项卡。我想在其中一个选项卡上创建一个列表视图,但我开始感到困惑。我需要制作另一个扩展ListActivity的.java文件吗?如果我需要为每个活动创建一个单独的.java文件,我可以看到即使是相对较小的应用程序也会变得非常大。
旁注
如果我想将ListView添加到我的一个选项卡中,我该怎么做?到目前为止,我没有发现任何内容提到如何将新活动添加到其他活动中。
其他答案给出了关于接口的好观点,这可能更符合您的需求。然而,要了解更多信息,不,您不必为每个新类创建一个新的.java文件,还有其他选择。然而,请记住,更多的课程并不一定是坏事。您的选择是。。。
嵌套类:
public class A {
public/private class B {
}
}
B的实例可以访问A的私有变量,但如果没有A的实例就无法构建(这是一种常用于按钮处理程序等的方法)
嵌套静态类:
public class A {
public/private static class B {
}
}
B的实例不能访问A的私有变量,但它们不需要构造A的实例。如果B被声明为public,则可以在任何地方实例化B的实例;如果B被宣布为private,则只能在A的方法中实例化。
匿名类:
public class A {
private void setupLayout() {
...
button.addClickListener(new ActionListener() {
public void actionPerfored(ActionEvent e)
{
handleClick();
}
});
}
}
这种奇怪的语法创建了一个没有名称的类,其功能与嵌套类相同(例如,可以访问私有变量)。这是编写嵌套类的另一种形式,有时会更短,但会导致非常奇怪的语法。
Java不支持对抽象类或普通类的多重继承,而只支持对接口的多重继承。
您可以创建扩展特定Activity
的抽象类,并不断创建抽象类,直到您有了一个继承所有活动特性的类。
或者,有一个继承多个接口的类。
如果使用IDE来执行此操作,则创建大量文件的开销要小得多。
但是,有几种方法可以在同一个文件中拥有多个类。这包括a)使用内部/嵌套类b)匿名类c)枚举d)包本地类。
如果将一个类的定义分布在多个文件中,那么唯一不能做的事情就是很容易。
Java不支持多重继承
解决方法是使用接口
但是,我们真的必须为每个新的活动创建一个单独的.java文件吗
不,如果你的活动可以在现有的类中完成,或者可以在现有类中细分。Java是围绕为每个活动创建类而构建的。
Java不允许多重继承。但它确实允许实现多个interface
。您不需要为每个class
创建一个单独的文件(尽管这是一种很好的做法)。您可以将子类封装在文件的主class
中。
ListView
可以是简单的extend
ed,您可以在xml等中使用相应的扩展类。
Java确实支持多重继承,如果您只是将基类抽象化,并将其称为interface
而不是class
。
您可以简单地用XML声明一个ListView
并在Activity
中调用它,不需要单独的ListActivity
,只需要为ListView
。当你的整个Activity
是一个ListView
时。
根据对更多课程的担忧,这并不是一件坏事。更多的类意味着更面向对象,尽管不是严格意义上的(Everything都有限制)
由于死亡钻石的问题,多重继承被认为是不好的。因此,解决方法是使用Java中称为Interface
的Pure Virtual Classes
(Interface在Objective-C中的意思是普通类)
我建议您阅读HeadFirst Java第二版,以便更好地掌握术语及其使用。这是一本适合初学者的好书。
- Threads with Classes and std::packaged_task
- C++ Classes/Confusion
- 在使用Qt Designer Form Classes扩展我自己的自定义小部件时防止重复的自动连接
- Classes composition
- C++ - 创建游戏实体时,我应该使用"sub classes"还是结构?
- C++中"classes"(非对象)的哈希表
- inheritance Classes
- C++11 empty flag classes
- Derived Classes C++
- C++ "Virtual functions handling on multiple base classes"
- Singleton Service classes in c++
- Static classes C ++
- Splitting up classes c++
- 使用命名空间std和Template Classes
- C++ Pointing to classes
- Classes in Swift
- Working with classes
- MessagePack C++ and Library Classes
- C++ 带"Empty classes"的多重继承内存布局
- 我们是否需要为分配"placement new" "simple POD classes"显式调用析构函数?