Java现在声明,定义后来

时间:2012-04-19 20:39:39

标签: java class methods declare

在java中,您可以在类中声明一个方法,然后在类中或类外部定义它吗?

我正在寻找类似于C ++的东西,你声明它然后在类之外使用:: format来定义它?

此外,不要重载方法。

2 个答案:

答案 0 :(得分:5)

C ++成员函数永远不会在“类之外”定义。 Class_Name::前缀将它们放在类中。它们不在类声明中。

在C ++中需要拆分声明和定义,因为单独的编译模型基于文本文件包含。无法从编译的目标文件中提取有关类的详细信息,因此类型信息的精简摘要会被分解到头文件中,并且必须包含该类的所有客户端模块。 Java具有更复杂的目标文件格式,这使得可以在没有头文件的情况下获取有关类的信息。

语言中出现的声明的另一个需要是处理函数之间的相互递归或其他形式的循环引用(例如,Wirth的原始Pascal语言中需要它们,它们不支持将程序拆分为单独的模块) 。 Java可以在不需要前向声明的情况下完成相互递归。您只需将类型检查推迟到完整解析。 Pascal中的前向声明不是为了使相互递归成为可能,而是为了能够在一次传递中编译它,从而可以在编译下一个函数之前发出一个函数的代码。 (当您的硬件于1968年制造时,这很重要。)

如果您使用的语言不需要声明,为什么还要费心寻找将它们放回去的方法呢?就像你被释放后继续吃监狱食物一样。 (这可能是“习得无助”的一个例子。)

无论如何,几十年来类型系统的最新技术水平已被标记为尽可能避免声明并依赖于类型推断的设计。看看你有多少次用C ++编写类名来完成任务。 class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ }。四次重复myclass只是为了创建一个什么都不做的虚拟类,使用在类声明之外定义的构造函数。

答案 1 :(得分:2)

你不能用Java做到这一点。每当您声明一个非抽象方法时,您还必须定义它。抽象方法没有定义,所以它们超出了这个问题的范围。