2016-06-07 56 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沒有友善的概念。存在的更接近於包私人的默認訪問,它聲明該符號可被同一包中的所有類訪問。如果您不希望枚舉可公開訪問,則可以使用它。