繁体   English   中英

Java:同一文件中的两个顶级类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM