我是Java的新手,并且关注“示例驱动的开发”。在第8章中,我们将franc和dollar子类化为Money。我已经像这样创建了franc和dollar的工厂方法,但是当我尝试运行测试时,我得到了“无法解析符号美元”(或franc)的测试行:
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());
}
}
法郎(美元是相同的):
public class Franc extends Money {
Franc(int amount){
this.amount = amount;
}
Money times(int multiplier){
return new Franc(amount * multiplier);
}
}
测试:
import org.junit.Test;
import static org.junit.Assert.*;
public class MoneyTest {
@org.junit.Test
public void testMultplication(){
Money five= new Money.dollar(5);
assertEquals(new Dollar(10), five.times(2));
assertEquals(new Dollar(15), five.times(3));
Money four= new Money.franc(5);
assertEquals(new Franc(10), four.times(2));
assertEquals(new Franc(15), four.times(3));
}
}
最佳答案
Money five= new Money.dollar(5);
错误的语法。更改为:
Money five= Money.dollar(5);
因为
new
关键字用于创建实例,但是您想改为调用静态方法。同样,抽象类也不能实例化。