【问题标题】:Accessing static classes in another java file访问另一个 java 文件中的静态类
【发布时间】:2017-03-26 08:32:23
【问题描述】:

我可以访问另一个 *.java 文件中的静态类吗?

我的情况是我在同一个文件夹中有两个 java 文件,A.java 和 B.java:
在A.java中,不仅包含A类,还包含静态C类:

public class A {
    public static void main(String[] args) {
          //code  
    }
    static class C{
        //code
    }
}

在B.java中,会使用C类的方法:

public class B {    
     //code, use C's methods  
}

在文件 B.java 中,我想使用在 A.java 中声明的类 C 的方法;但是,即使我将 A.java 和 B.java 放在同一个文件夹中,编译器也无法识别 C 类。我想我不需要导入任何东西,因为两个 java 文件都在同一个文件夹中,不是吗?有谁知道如何解决这个问题?谢谢!

【问题讨论】:

  • 只需使用A.C.whatever()

标签: java static-classes


【解决方案1】:

请注意,C 类没有访问修饰符,只能在同一个包中可见。澄清一下:子类不会从其封装类继承访问修饰符。

如果AB 在同一个包上,您可以使用BB 访问A.C.<code> 如果您想让C 可用于A 之外的类您需要将子类 C 公开的包:

// [...]
// insead of >>static class C {<<
public static class C {
// [...]

更改访问修饰符后,您可以使用上面提到的C (A.C.&lt;code&gt;)

【讨论】:

  • 谢谢!有用。我有两个问题: 1.我被告知一个规则,一个 .java 文件中只允许有一个公共类,因为这个公共类需要与 java 文件的名称相同。那么在一个 *.java 文件中有两个公共类是不是很好呢? 2.为什么我不能使用“import A.C.;”在 B.java 而不是你的方法?我刚刚尝试过,但没有奏效。但我想知道原因。如果你能告诉我,那会很有帮助。谢谢!
  • 不客气。对于您的第一个问题:每个 .class 文件(已编译的 .java 文件)都需要有一个与文件同名的“根”类。但是,您可以在此根类中拥有任意数量的公共子类。对于你的第二个问题:这可以通过稍微不同的语法来实现。您需要使用import A.C; 代替import A.C.;(没有以下.)。如果A 在另一个包中,您也需要指定它(例如:import my.package.A.C;)。
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多