[英]Java: two top level class in same file
例如我有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
,如何知道将D.java
哪个类B?
还有一个问题,当我在A类和C类之外声明B类的真正类型时,这一点使我感到非常沮丧。
谢谢 :)
当您已经在A.java
完成此A.java
:
public class A {
// normal
}
class B { // cannot declare: public class B
}
您将无法在同一包中的同一C.java
中定义class B
,因为它已经存在于同一包中
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
}
}
我尝试过的内容如下,它向我展示了这一点:
我猜您在最后一个代码段中打了错字(宣布B为公开)。 但是重要的是,您不能在包中定义两个具有相同名称的类。 它将引发编译器错误。 我已经使用IDE进行了尝试,并且该项目表明存在歧义,因为已经定义了B类。
您将获得重复的类定义。 A.java将被编译为A.class和B.class。 编译C.java会导致错误或覆盖B.class。
B类不是公共的,它是本地程序包,因此只能由同一程序包中的类使用。
为什么不创建单独的类BForA和BForC? 如果要重用某些内容,请创建一个共享的AbstractB父类。
在类A中定义的类B 不是公共的,它是包私有的 -仅在定义它的包内部可见。
当您同时在类D中定义类B时,您将得到一个错误:类型B已被定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.