实现工厂类时,函数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;    
   }
   }
   
}

解决方案 »

  1.   

    其实没什么错,就是你的switch里面没有写default, 所以编译器认为你应该在switch括号外再加一个return。所以要么就在swtich里加上defaut, 像这样:        switch(optType)
            {
                case '+':
                    return new OperationAdd();
                // break;
                case '-':
                    return new OperationSub();
                //break;
                case '*':
                    return new OperationMul();
                //break;
                case '/':
                    return new OperationDiv();
                //break;
                default:
                    return null;
            }
        }
    或者就在switch括号外加上
    return null;