【问题标题】:Java Class and Interface Name CollisionJava 类和接口名称冲突
【发布时间】:2017-08-27 03:45:15
【问题描述】:
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”。为什么这样?我可以不具有相同的类和接口名称

【问题讨论】:

  • "我不能有相同的类和接口名称" 不,不是这样。即使可以,你也不应该这样做。
  • 你应该给类和接口(以及方法和变量)起有意义的名字。
  • 接口一种特殊类型的抽象类。这就是为什么你可以写System.out.println(Runnable.class)System.out.println(Class.forName("java.lang.Runnable"))
  • 致反对投票的人,投票结束:这是一个合法的问题,并且(根据我的搜索)不是重复的。它表明 OP 误解了关于类和接口的一些非常基本的东西(它们在同一个命名空间中命名)这一事实并没有使它成为一个坏问题。 (好的:如果 OP 可以对此进行更好的研究。但是,考虑到 SO 应该是一个可以找到答案的地方......而这里没有这个问题的答案。)

标签: java class interface


【解决方案1】:

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

所以如果你的包名是com.foo.bar,那么接口和类名都是:com.foo.bar.A

在不同的包下当然可以有相同的名字。

【讨论】:

    【解决方案2】:

    你不能拥有同名的类和接口,因为 Java 语言不允许这样做。

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

    A a;
    

    那个变量的类型是什么?是类还是接口?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多