【问题标题】:Accessing multiple classes from another java file从另一个 java 文件访问多个类
【发布时间】:2016-12-13 21:34:10
【问题描述】:

我被困在一个作业问题上,任务只是将包含多个类的单个 java 文件分解为多个 java 文件,然后导入这些 java 文件,以便原始项目仍然有效。(总共 4 个类,将其中 3 个移动到单独的文件中)

我创建了一个新项目并将一个类移至该新项目。然后将其导入我的原始文件并将必要的功能设置为public,它就可以工作了。

对于其他两个类,我必须创建一个具有完全不同名称的新项目(例如 Five)并将类 ThreeFour 粘贴到该项目中。然后将这两个类导入到原文件中。

我这样做了,它说课程 ThreeFour 应该是公开的。然而,这是不可能的,因为 Five 类已经是公开的。如何从原始文件中访问这两个类?

项目一:(这是我试图运行的项目)

package one;
import two.Two;
import five.Five;

public class One {
public static void main(String[] args) {
...
}
)

class Customer{
...//this class accesses attributes and methods of classes 
//Two, Three and Four. The error occurs for methods from classes Three and Four
}

项目二

package two;
public class Two {
public static void main(String[] args) {
...
}
)

项目五

package five;
public class Five {
public static void main(String[] args) {
...
}
}

class Three{
...
}

class Four{
...
}

【问题讨论】:

  • 它说它说第三和第四类应该是公开的。
  • 你说五是一个项目。是一堂课吗?如果是这样,三和四是内部类?也将它们公开(如果您没有 Five 实例,请将它们设为静态类)。
  • 如果你提供了一个最小的、完整的、可验证的例子stackoverflow.com/help/mcve
  • @GeneMarin Yes Five 是一个新项目,包含类 Five(empty)。我不能在这个类中粘贴其他两个类。我必须将它们粘贴到外面,然后在我的主项目中访问它们。

标签: java packages public


【解决方案1】:

看看这个问题(和答案):Can a java file have more than one class?

每个文件只能有一个公共类。如果您不想将ThreeFour 作为Five 中的内部静态类,则必须将它们放在单独的文件Three.javaFour.java 中.

另外,package 可以等同于一个文件夹,因此如果您的类在同一个文件夹中(一个模块/逻辑单元的一部分),它们都可以在同一个包中,例如 main

因此,您的包main 将包含每个Java 文件中的所有类(这也是一种很好的做法,除非一个类在逻辑上是另一个类的子单元)。另请注意,同一包中的类中不需要导入。他们甚至不必公开。

【讨论】:

  • 谢谢。我不能将类 ThreeFour 放在单独的文件中(问题的一部分)。所以基本上我不能把它们公开,因为第五班是公开的。我也不能把它们放在一个公共课上。那么现在唯一的解决方案是让这个文件成为主包的一部分吗?我稍后会试试看。
【解决方案2】:

正如上面的答案,一个 .java 文件只有一个公共类,我们不能将其他类设为公共,因此,其他类不能被不同包的类访问,因为这些类是默认的,并且它们仅在它的包中可见。其他包无法访问这些类。

但如果你真的想这样做,下面的例子就是这样做的方法之一。

package pack1;
public class A {
    public void sum(int a, int b){
        System.out.println("Addition of a and b ="+(a+b));}
    public static class Sub
    {
        public void subtraction(int a, int b)
        {
            System.out.println("subtraction a-b ="+(a-b));

        }
    }     

}

// below main class is written and in that main class we are accessing the above classes of pack1

package mypack;
import pack1.*;

public class B {
    public static void main(String[] args) {
        A o1=new A();
        int a=50,b=20;
        o1.sum(a,b);
        A.Sub o2=new A.Sub();
        o2.subtraction(a,b);
    }
}

【讨论】:

    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多