例如,我有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
}
}
如果我在文件C.java
中创建新的B类。 C将引用文件C.java
中的B类,而不是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类?
另一个问题,当我在A级和C级之外宣布它时,B类的实际类型是什么。这一点让我感到非常沮丧。
谢谢:)
答案 0 :(得分: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
}
}
我尝试过的是下面的内容,它向我展示了这一点:
答案 1 :(得分:1)
我猜你在最后一段代码片段中写了一个拼写错误(将B声明为公开)。但重要的是你不能在包中定义两个具有相同名称的类。它会抛出编译器错误。我用IDE尝试了这个,项目表明由于已经定义了B类,所以存在歧义。
答案 2 :(得分:1)
您将获得重复的类定义。 A.java将被编译为A.class和B.class。编译C.java会导致错误或覆盖B.class。
B类不是公共的,它是本地的包,因此只能由同一包中的类使用。
为什么不创建单独的BForA和BForC类?如果要重用某些内容,请创建一个共享的AbstractB父类。
答案 3 :(得分:1)
A类中定义的B类不公开,包私有 - 仅在定义它的包内可见。
当您还在D类中定义类B时,您将收到错误:类型B已经定义。