-1

例如我有A.java. 在A.java我有:

public class A {
  // normal 
}

class B {  // cannot declare: public class B

}

并与A.java. 我创建C.java并声明:

public class C {
  public void methodC() {  
      A a = new A(); 
      B b = new B(); // no error -> B is a public class
  }
}

如果我在文件中创建新的 B 类C.java。C 将在文件中引用 B 类C.java,而不是A.java.

class B {
}
public class C {
  public void methodC() {
      B b = new B(); //this B refer to C.java rather than A.java
  }
}

所以,我在这里看到了一些问题:在同一个包中,会有两个相同的类。那么,当我创建时D.java,我怎么知道将引用哪个 B 类?

还有一个问题,什么是真正的B类,当我在A类和C类之外声明它时。这一点让我感到非常沮丧。

谢谢 :)

4

4 回答 4

4

当你已经这样做了A.java

public class A {
  // normal 
}

class B {  // cannot declare: public class B

}

您将无法class B在同一个包中定义相同C.java的内容,因为它已经存在于同一个包中

class B {            //You won't be able to do this as same class in package exists

}
public class C {
  public void methodC() {
      B b = new B(); //this B refer to C.java rather than A.java
  }
}

我尝试过的如下所示,它向我展示了这一点:

在此处输入图像描述

于 2012-12-12T15:03:38.563 回答
1

我猜你在最后一个代码片段中打错了(将 B 声明为公共)。但重要的是你不能在一个包中定义两个同名的类。它会引发编译器错误。我已经使用 IDE 进行了尝试,该项目表明存在歧义,因为 B 类已经定义。

于 2012-12-12T14:48:58.533 回答
1

您将获得重复的类定义。A.java 将被编译为 A.class 和 B.class。编译 C.java 将导致错误或覆盖 B.class。

B 类不是公共的,它是包本地的,因此只能由同一包中的类使用。

为什么不创建单独的类 BForA 和 BForC 之类的?如果您想重用某些东西,请创建一个共享的 AbstractB 父类。

于 2012-12-12T14:49:47.553 回答
1

在类 A 中定义的类 B不是公共的,它是包私有的 - 仅在定义它的包内可见。

当你还在类 D 中定义类 B 时,你会得到一个错误:类型 B 已经定义。

于 2012-12-12T14:50:59.563 回答