我是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关键字用于创建实例,但是您想改为调用静态方法。同样,抽象类也不能实例化。

10-02 03:06