2017-04-02 43 views
1
interface A 
{ 
void print(); 
} 


class A implements A 
{ 

public void print() 
{ 
System.out.println("Hello"); 
} 

public static void main(String args[]) 
{ 
A a=new A(); 
a.print(); 
} 

} 

當我使用此代碼時,它說「重複的類:A」。爲什麼這樣?我可以不具有相同的類別和接口名稱嗎?Java類和接口名稱碰撞

+1

「_Can我沒有相同的類和接口名稱_」不,不是這樣的。即使你可以,你也不應該這麼想。 – csmckelvey

+0

你應該給類和接口(和方法和變量)有意義的名字。 – Guy

+0

接口*是一種特殊類型的抽象類。這就是爲什麼你可以編寫'System.out.println(Runnable.class)'和'System.out.println(Class.forName(「java.lang.Runnable」))''。 – VGR

回答

5

由於Java語言不允許,所以不能有同名的類和接口。

首先,它是不明確的。如果你聲明這樣一個變量:

A a; 

那個變量的類型是什麼?它是類還是界面?

其次,已編譯的Java代碼存儲在以文件中定義的類或接口命名的.class文件中。名爲A的接口和名爲A的類都將編譯爲名爲A.class的文件。在同一文件夾中不能有兩個具有相同名稱的文件。

錯誤消息顯示「重複的類」,因爲Java內部將接口視爲特殊的類。

1

類和接口的完全限定名僅由包名和類/接口名組成。

所以,如果你的包名稱爲com.foo.bar,無論是接口和類的名稱將是:com.foo.bar.A

在不同的包,你可以有,當然相同的名稱。