2016-06-07 60 views
0

我是一位经验丰富的C开发人员,我想知道与Java中的头文件等效的内容。我有一个枚举,我想在两个类之间共享,但没有头文件,我不知道如何做到这一点。C头文件的Java等价物 - 如何在类之间共享定义

标准方法是拥有一个超类,并在里面定义一个定义,然后让其他两个类继承它?谷歌提到的接口,但我没有任何经验。

+1

Juste在您自己的文件中创建您的枚举并将其导入到您的2个类中。 – StephaneM

+3

创建一个公共枚举,然后通过导入它可以在所有类中使用。 https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html – vdolez

+1

阅读Oracle Java教程。你不能将你的C经验“转换”成Java,它不会那样工作。 – Kayaman

回答

0

这取决于你想完成的封装级别。在同一封装与两类

  • ,其默认(包保护)预选赛:如果你想有只在你再提到的两个类可用的枚举,你可以通过以下方式定义它鉴于枚举
  • 如果这两个类在不同的包比你可以在一个共同的抽象类定义,并使用受保护的预选赛对于给定的枚举,这样它将是可用于扩展给定的抽象类

我更喜欢第一种方法,我认为它是最干净的,它也遵循OOP bes实践。

至于界面,他们曾经在枚举之前使用为常量提供“容器”,但在我看来,目前他们不应该用于这种情况。

0

一个具体的例子:

mypackage/MyEnum.java(定义枚举)

package mypackage; 
public enum MyEnum { 
    VALUE_1, VALUE_2; 
} 

mypackage/MyClass.java(使用ENUM)

package mypackage; 
public class MyClass { 
    public void doSomething(MyEnum myEnum) { 
    switch(myEnum) { 
     case VALUE_1: 
     // do something 
     break; 
     case VALUE_2: 
     // do something 
     break; 
    } 
    } 
} 

otherpackage/OtherClass.java(使用另一个包枚举)

package otherpackage; 
import mypackage.MyEnum; // explicitly import as MyEnum is not in the same package as this class. 
public class OtherClass { 
    public MyEnum provideEnum() { 
    return MyEnum.VALUE_1; 
    } 
} 
0

java的不使用标题,而是直接进口声明从其他类。在C++(或C)中,通常会将源文件中定义的头文件中的声明拆分开来,并使用一堆#include来加载外部声明。

在Java中,您使用等价的import语句来启动文件,以声明您需要在源代码中使用的外部类或静态符号。

要回答确切的问题,您可以使枚​​举为普通类,或使其成为类之一的内部(静态)类,并从另一个类访问它 - 提供的访问权限允许它。

您必须知道Java没有友善的概念。存在的更接近于包私人的默认访问,它声明该符号可被同一包中的所有类访问。如果您不希望枚举可公开访问,则可以使用它。