2010-03-08 38 views
6

由於我們使用「default」關鍵字作爲訪問說明符,並且它可以在switch語句中使用,並且具有完全不同的用途,所以我很好奇,是否有任何其他關鍵字可用於多種用途在java中有兩個相同的關鍵字?

+10

您不能使用'默認'作爲訪問說明符。您根本不使用說明符來獲取默認訪問權限。 – 2010-03-08 15:38:07

+0

Dupe of http://stackoverflow.com/questions/2402468/same-keyword-for-two-purposes-in-java – 2010-03-08 15:48:09

+4

這是原創 - 兩個額外的模仿被創建。 – 2010-03-08 15:48:32

回答

4
  • default既可以在使用一個開關和一個註釋中的默認值(如Bozho指出的)
  • final表示「不能從派生/覆蓋」和「是隻讀的」,這是兩個不同的 - 但相關的 - 的含義(如由Jon指出)
  • extends可以既使用指定一個類的父類,可以在通配符和類型變量被用來把一個約束(相關,但不完全一樣)(List<? extends Foo>
  • super可用於指定的東西在目前的超類或通配符來放置約束(List<? super Foo>
  • static指「類,而不是一個實例的一部分」(對於方法,屬性或初始值設定),並作爲static import
  • class聲明一個類(class Foo {}),或指一類文字(Foo.class)(由ILMTitan作爲回答)
  • for可以在一個正常的比真的有兩個方面的含義用於循環和「強化」了,但是這更像是超載(如Bozho所說的這麼好聽) )
7

您不能使用default作爲訪問說明符,所以我不認爲即便如此。 (編輯:正如Bozho指出的,它可以用於註釋。)

final意思是「不能從/覆蓋」和「是隻讀」,這是兩種不同的 - 但相關的含義。

2

default關鍵字不用作訪問說明符。缺少private,protectedpublic意味着使用default

實施例:

class Test { // default access for class. 

int A; // default access for the class member. 
} 

其中找到不同的使用的Java關鍵字的一些實例是:

  • final:甲finalclass不能作爲子類,一個final方法不能被重寫,和一個final變量最多可以出現一次,作爲左手錶達式。

  • Super:用於訪問由它出現的類繼承的類的成員,也用於將構造函數的調用轉發給超類中的構造函數。

  • Static:用於創建static初始化塊,還有static成員和static導入。

  • for:用於傳統的for循環和更新的Java 1.5 enhanced for循環。

+0

這是所有其他答案的好聚合 – 2010-03-08 15:57:02

+0

如果你認爲超級有兩個目的,那麼你應該考慮'this'至少有兩個目的。 – Yishai 2010-03-08 17:27:07

13

在訪問修飾符的情況下的「默認」不是一個關鍵字 - 你不寫:
default void doSomething()

但是,指定註釋的屬性的默認值時 - 它是。

switch (a) { 
    default: something(); 
} 

public @interface MyAnnotation { 
    boolean bool() default true; 
} 

,連同final由喬恩斯基特指出,似乎面面俱到。也許,除了「過載」 for關鍵字:

for (initializer; condition; step)for (Type element : collection)

0

我給看看java keywords但似乎關鍵字是唯一的..你可以檢查自己。

順便說一句default不能用作訪問說明符,它在沒有指定任何人時被繼承。

2

static關鍵字關聯的方法和字段與類的而不是類的實例,但它也可以用來表示靜態初始化部分爲:

public class MyClass 
{ 
    private static int a; 

    static 
    { 
     a = 1; 
    } 

    public static void doSomethingCool() 
    { 
     ... 
    } 
} 

帕斯卡爾的評論讓我想起了靜態進口:

import static MyClass.doSomethingCool; 

public class MyOtherClass 
{ 
    public void foo() 
    { 
     // Use the static method from MyClass 
     doSomethingCool(); 
    } 
} 
+0

Plus靜態導入(http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html) – 2010-03-08 15:52:47

+0

@帕斯卡爾ooo,謝謝,我剛剛瞭解到這些! – 2010-03-08 15:53:27

2

關鍵字final可能意味着不同的事情。

  • 修改classes意味着該類不能被子類化。
  • 修改method時,表示該方法不能被覆蓋。
  • 修改variable時,表示該變量不能指向任何其他變量。
0

我們真的使用default作爲訪問說明符嗎?沒有說明符是「默認」。但是你不用那種方式使用關鍵字。

0

最終具有不同的用途:

    在一個變量聲明
  • 它意味着變量不能被改變。
  • 在方法簽名中,它表示方法不能被覆蓋
  • 在參數列表中,它表​​示變量不能在方法中被更改。
+0

在參數列表中似乎與局部變量聲明相同。 – Yishai 2010-03-08 17:29:44

0

「extends」關鍵字可以用於單一繼承(Java中的「實現」或「純抽象類」又稱「接口繼承」)。

「extends」關鍵字也可用於多個(接口)繼承。因此,一直認爲Java不支持多重繼承的人將很難爭辯說,在這兩種情況下,「擴展」完全是一回事。

現在我在另一個陣營:我認爲多接口繼承是多繼承,實現繼承只是一個OOP細節(在OOA/OOD級別不存在),因此我認爲「伸出」真的做得兩種情況下,同樣的事情,並且因此我的回答沒有回答這個問題:)

但它是一個有趣的關鍵詞仍然:)

3

其他人還沒有提到的東西:關鍵字有兩個不同的用途。

聲明一個類:

class Test{}; 

和指示類文本:

Class<Test> testClass = Test.class; 
0

你可以把下面的東西

  1. 默認
  2. 最終
  3. 個超
  4. 」在不同的地方使用(結腸癌),其在不同的地方
0

由於所有其他的答案都表示不同的含義,還有取決於服務器的多種用途的關鍵字上下文。我只是想補充一點,這是有原因的:強烈厭惡添加關鍵字,因爲這些添加會破壞現有的代碼,所以當添加新功能時,如果現有的關鍵字合理使用,比如超級和擴展對於泛型和默認的註釋,或者它們只是在增強for循環中使用的冒號中跳過。

所以我的觀點是,隨着語言的不斷髮展,現有關鍵詞的使用更多,而不是引入新的關鍵詞。

0

順便提一下,Java中沒有訪問說明符。 JLS中的術語是「訪問修飾符」。

相關問題