Java 无法解析符号、抽象类工厂

Java 无法解析符号、抽象类工厂,java,Java,我是Java新手,我将通过示例进行测试驱动开发。在第八章中,我们将法郎和美元的子类严格要求转换成货币。我已经为法郎和美元创建了工厂方法,但当我尝试运行测试时,我得到测试行的“无法解析符号美元”(或法郎): Money five= new Money.dollar(5); Money four= new Money.franc(5); 我已经从头开始两次尝试谷歌搜索,但我不确定我错过了什么 货币等级: public abstract class Money { abstract Mon

我是Java新手,我将通过示例进行测试驱动开发。在第八章中,我们将法郎和美元的子类严格要求转换成货币。我已经为法郎和美元创建了工厂方法,但当我尝试运行测试时,我得到测试行的“无法解析符号美元”(或法郎):

Money five= new Money.dollar(5);
Money four= new Money.franc(5);
我已经从头开始两次尝试谷歌搜索,但我不确定我错过了什么

货币等级:

public abstract class Money {

    abstract Money times(int multiplier);

    protected int amount;

    static Money dollar(int amount){
        return new Dollar(amount);
    }

    static Money franc(int amount){
        return new Franc(amount);
    }

    public boolean equals(Object object){
        Money money = (Money) object;
        return amount == money.amount
        && getClass().equals(money.getClass());
    }

}
法郎(美元不变):

测试:

是错误的语法。将其更改为:

Money five= Money.dollar(5);
因为
new
关键字用于创建实例,但您希望调用静态方法。抽象类也不能被实例化

是错误的语法。将其更改为:

Money five= Money.dollar(5);

因为
new
关键字用于创建实例,但您希望调用静态方法。抽象类也不能实例化。

您使用的是工厂模式;您根本不需要使用
new
关键字

相反,请使用以下工厂:

Money five= Money.dollar(5);
Money four= Money.franc(5);

我还鼓励对你的目标进行具体说明;一种是
美元
,另一种是
法郎
;您应该使用这些实例,而不是更抽象的
Money
。如果您的子类有更明显的不同(例如,
Franc
有一种方法表明它在哪些国家被接受),那么不这样做会对您产生影响。

您使用的是工厂模式;您根本不需要使用
new
关键字

相反,请使用以下工厂:

Money five= Money.dollar(5);
Money four= Money.franc(5);

我还鼓励对你的目标进行具体说明;一种是
美元
,另一种是
法郎
;您应该使用这些实例,而不是更抽象的
Money
。如果您的子类有更明显的不同(例如,
Franc
有一个方法表明它在哪些国家被接受),那么不这样做会对您产生影响。

我知道它会是这样的!非常感谢你。我就知道会是这样!非常感谢,谢谢!我记得读过关于构造函数和抽象类的文章,但现在应该坚持住了。@Makoto-Amy正在使用
Dollar
Franc
的实例-看看她的代码@戴维德瓦莱斯:不过,看看它们储存在什么东西里。假设
Franc
有一种方法,可以打印出它相对于美元的价值。如果它只针对那个child方法,你会怎么调用它呢?如果他马上读的话,我确实有一个拼写错误,我已经纠正了。Makoto真的很快。@Amy-你的书不可能给你和Makoto一样的建议。看看为什么。谢谢!我记得读过关于构造函数和抽象类的文章,但现在应该坚持住了。@Makoto-Amy正在使用
Dollar
Franc
的实例-看看她的代码@戴维德瓦莱斯:不过,看看它们储存在什么东西里。假设
Franc
有一种方法,可以打印出它相对于美元的价值。如果它只针对那个child方法,你会怎么调用它呢?如果他马上读的话,我确实有一个拼写错误,我已经纠正了。Makoto真的很快。@Amy-你的书不可能给你和Makoto一样的建议。了解一下原因。
Money five= Money.dollar(5);
Money four= Money.franc(5);