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