Java类和接口名称冲突

Java类和接口名称冲突,java,class,interface,Java,Class,Interface,当我使用这段代码时,它说的是“重复类:A”。为什么会这样?我可以没有相同的类和接口名称吗?您不能有具有相同名称的类和接口,因为Java语言不允许这样做 首先,它是模棱两可的。如果您声明这样的变量: interface A { void print(); } class A implements A { public void print() { System.out.println("Hello"); } public static void main(String args[]) {

当我使用这段代码时,它说的是“重复类:A”。为什么会这样?我可以没有相同的类和接口名称吗?

您不能有具有相同名称的类和接口,因为Java语言不允许这样做

首先,它是模棱两可的。如果您声明这样的变量:

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();
}

}
该变量的类型是什么?是类还是接口

其次,编译后的Java代码存储在以文件中定义的类或接口命名的
.class
文件中。名为
A
的接口和名为
A
的类都将编译为名为
A.class
的文件。同一文件夹中不能有两个同名文件


错误消息显示“duplicate class”,因为Java在内部将接口视为一种特殊的类。

类和接口的完全限定名仅由包名和类/接口名组成

因此,如果包名是
com.foo.bar
,那么接口和类名都将是:
com.foo.bar.A


当然,在不同的软件包下,您可以有相同的名称。

我可以没有相同的类和接口名称吗?不,不是这样。即使可以,也不应该这样做。应该给类和接口(以及方法和变量)指定有意义的名称。接口是一种特殊类型的抽象类。这就是为什么你可以写
System.out.println(Runnable.class)
System.out.println(class.forName(“java.lang.Runnable”))
。对投票的人来说,这是一个合法的问题,而且(根据我的搜索)不是重复的。这表明OP误解了类和接口(它们在同一名称空间中命名)的一些非常基本的东西,这一事实并不意味着这是一个坏问题。(好的:如果OP可以更好地研究这一点,但是,考虑到这应该是一个寻找答案的地方……这里没有一个问题。)
A a;