Java:类在包中没有找到对方(工厂设计模式)

Java: Classes do not find each other in package (factory design pattern)

我有三个不同的 classes:

Woman.java

package human;
public class Woman extends Human{
    private final String pnr;
    private final String namn;

    public Woman(String n, String p){
        namn = n;
        pnr = p;
    }
    public String toString(){
        return "My name is "+namn+" and I am a woman.";
    }

}

Man.java

package human;
public class Man extends Human{
    private final String pnr;
    private final String namn;

    public Man(String n, String p){
        namn = n;
        pnr = p;
    }
    public String toString(){
        return "My name is "+namn+" and I am a man.";
    }   
}

Human.java

package human;
public abstract class Human{
    public static Human create(String namn, String pnr){
        char nastsist_char = pnr.charAt(9); // takes second last char in pnr
        String nastsist_string = Character.toString(nastsist_char);
        float siffra = Float.parseFloat(nastsist_string);   //Converts to float
        if ((siffra % 2) == 0){                 //Checks if even
            return new Man(namn, pnr);          
        }
        else{
            return new Woman(namn, pnr);
        }
    }
}

当我尝试编译文件 Human.java 时,出现错误

cannot find symbol: class Man,

cannot find symbol: class Woman.

当我尝试编译文件 Man.java 或 Woman.java 时,出现错误

cannot find symbol: class Human.

public/private class 可见性的改变没有帮助。所有文件都位于名为 human.

的目录中

这里有什么问题?

我应该补充一点,我要实现的目标是拥有一个无法实例化的抽象 class Human,并且在那个 class 我想要一个创建方法returns 个男人或女人的实例取决于 pnr。此外,我不希望 Man 或 Woman 可以通过 create 方法之外的任何其他方式进行实例化。

谢谢

你自己编译它们,在终端或什么的? 然后尝试将所有文​​件一起编译:

javac Man.java Woman.java Human.java

你的代码和打包都没有问题,所以问题出在其他地方。你如何编译?我猜你可能正在做

javac human/Human.java

这将不起作用,因为 ManWoman 不在类路径中,因此在 Human 上工作时 Java 编译器不知道。编译时应该包括这些:

javac human/*.java

干杯,

您在 class 中有周期。所以你有两个选择。 1)一起编译 2) 创建一个新的 class 例如在那里工厂和实例化对象

在你的代码中创建循环从来都不是一个好主意

您是否尝试过:javac *.java 在您的文件夹中?

Java: How can I compile an entire directory structure of code ?