2010-03-08 44 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中的术语是“访问修饰符”。