2017-04-02 18 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(); 
} 

} 

私はこのコードを使用しているとき、 "duplicate class:A"と言っています。なぜそうなのか?同じクラス名とインタフェース名を持つことはできません。Javaクラスとインターフェイス名の衝突

+1

"私は同じクラスとインターフェイス名を持っていません_"いいえ、これは似ていません。たとえできても、あなたはしたくないはずです。 – csmckelvey

+0

クラスとインターフェイス(およびメソッドと変数)に意味のある名前を付ける必要があります。 – Guy

+0

インタフェース*は特殊な抽象クラス型です。そのため、 'System.out.println(Runnable.class)'と 'System.out.println(Class.forName(" java.lang.Runnable "))'を書くことができます。 – VGR

答えて

5

Java言語では許可されていないため、同じ名前のクラスとインタフェースを使用することはできません。

まず、あいまいです。次のような変数を宣言した場合:

A a; 

どのような変数がありますか?それはクラスかインターフェイスか?

第2に、コンパイルされたJavaコードは、.classファイルに定義されているクラスまたはインタフェースの名前を持つファイルに格納されます。 Aという名前のインターフェイスとAという名前のクラスは、ともにA.classという名前のファイルにコンパイルされます。同じフォルダに同じ名前のファイルを2つ持つことはできません。

Javaは内部的に特別な種類のクラスとしてJavaを処理するため、エラーメッセージに「duplicate class」と表示されます。

1

クラスとインタフェースの完全修飾名は、パッケージ名とクラス/インタフェース名のみで構成されます。

あなたのパッケージ名がcom.foo.barであれば、インターフェースとクラス名の両方が次のようになります。あなたはもちろんの同じ名前を持つことができます異なるパッケージの下com.foo.bar.A