我是一名正在学习Java的C ++程序员,我想知道Java中的OOP是否遵循与C ++相同的类定义和声明分离原则,即。将它们放在不同的文件中。我已经浏览了互联网,包括Android开发者网站,我遇到的所有代码都同时进行了定义和声明。
这只是C ++开发与Java开发之间的区别之一,还是我一直在寻找简单的方法来限制代码在互联网上发布的复杂性?我在一些C ++文档中看到了声明和定义,但我知道这样做是不好的做法。
答案 0 :(得分:7)
在C ++中分离声明有一个实际的原因,它允许单独编译源文件。
在Java中没有这样的需求(因为所有内容都被编译为字节码),所以不允许这样做。答案 1 :(得分:4)
以下答案已根据评论进行了大量编辑。
您不需要纯粹为了编译器而将类拆分为定义和声明,因为Java中不需要前向声明(如C ++中那样)。由于设计要求,您可能希望将类定义和声明拆分为接口/类对(或[abstract]类/类对),例如:
然而,这更类似于使用虚拟基类和在C ++中具体实现类,并且通常称为“编程到接口”。您可以阅读有关技术in this article的更多信息(有一些参数可以解释为什么您可能更喜欢使用抽象类而不是接口作为基础)。此外,应仔细考虑这种分裂;在许多情况下,拆分一个类只是纯粹的过度杀伤,会导致不必要的代码膨胀。
因此,简短的回答是:您不需要为了具有前向声明(原始问题请求)而拆分该类,但如果有设计理由(例如,如果有设计理由,您可能想要这样做)但 相当于C ++的头文件/类文件拆分。)
答案 2 :(得分:2)
在Java中,您没有选择:classname链接到文件名。对于源文件根目录中名为x/y/z/T.java
的文件,T.java
必须如下所示:
package x.y.z;
[some modifiers here] class T {
// class T here
}
有一些方法可以将“类定义”与“实现”分开,最接近你的想法是声明一个接口I
并让一个类C
实现I
。还要考虑抽象类。
除了声明interface
而不是class
之外,接口具有完全相同的约束。抽象类只是一个带有abstract
修饰符的类。
答案 3 :(得分:0)
在Java中,你在一个文件中有一个类,即你不能 - 也不需要 - 在多个文件上拆分类(你可以在一个文件中有多个非公共类)。
您可以使用接口,即在一个文件中定义类的接口,并在另一个文件的类中实现该接口。如果您随后分发API,则只需分发界面。
答案 4 :(得分:0)
在Java中没有像C ++中那样的头文件和源文件。如果要将类声明与其实现分开,可以定义一个声明方法的接口,然后创建一个实现该接口的类。
答案 5 :(得分:0)
Java中不存在您所写的分离。您可以将方法定义(非静态的)分离为interface
。
答案 6 :(得分:0)
不,这种分离在java中不存在。但是看看interface关键字。你可以明确声明接口!