[求助]用java实现简单工厂模式下的计算器程序时出现的问题,求大侠指教!
实现工厂类时,函数createOperation声明返回值为Operation类型,实际返回值为它的子类,也就是具体的操作实现类,这种方式在C#中是没有问题的,为什么在java中会报错?
产品类实现如下:---------------------
//运算操作抽像类
public abstract class Operation
{
public double NumberA = 0;//接口中的成员变量默认为final,所以未使用接口。
public double NumberB = 0;
public abstract double GetResult();
}
//运算操作具体类
class OperationAdd extends Operation
{
public double GetResult()
{
return NumberA + NumberB;
}
}
//运算操作具体类
class OperationSub extends Operation
{
public double GetResult()
{
return NumberA - NumberB;
}
}
//运算操作具体类
class OperationMul extends Operation
{
public double GetResult()
{
return NumberA * NumberB ;
}
}
//运算操作具体类
class OperationDiv extends Operation
{
public double GetResult()
{
if(NumberB == 0)
{
System.out.println("[error]Number B is zero!");
return 0;
}
return NumberA / NumberB;
}
}
工厂类实现如下:
public class OperationFactory
{
public static Operation createOperation(char optType)
--这里报错了,提示“此方法必须返回Operation类型的结果”
{
switch(optType)
{
case '+':
return new OperationAdd();
// break;
case '-':
return new OperationSub();
//break;
case '*':
return new OperationMul();
//break;
case '/':
return new OperationDiv();
//break;
}
}
}
------解决方案--------------------其实没什么错,就是你的switch里面没有写default, 所以编译器认为你应该在switch括号外再加一个return。
所以要么就在swtich里加上defaut, 像这样:
switch(optType)
{
case '+':
return new OperationAdd();
// break;
case '-':
return new OperationSub();
//break;
case '*':
return new OperationMul();
//break;
case '/':