class Operation {
double numberA;
double numberB; public Operation() { } public double getResult() {
double result = 0;
return result;
}
}class OperationAdd extends Operation {
double numberA;
double numberB; public OperationAdd() { } public double getResult() {
double result = 0;
result = numberA + numberB;
return result;
}}class OperationSub extends Operation {
double numberA;
double numberB; public OperationSub() { } public double getResult() {
double result = 0;
result = numberA - numberB;
return result;
}
}class OperationMul extends Operation {
double numberA;
double numberB; public OperationMul() { } public double getResult() {
double result = 0;
result = numberA * numberB;
return result;
}
}class OperationDiv extends Operation {
double numberA;
double numberB; public OperationDiv() { } public double getResult() {
double result = 0;
result = numberA / numberB;
if (numberB == 0) {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
}class OperationFactory {
public static Operation createOperation(char operate) {
Operation oper = null;
switch (operate) {
case '+':
oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
}
return oper;
}
}public class Calculator { public static void main(String[] args) {
Operation operation;
operation = OperationFactory.createOperation('+');

System.out.println(operation.getClass());

operation.numberA = 5.0;
operation.numberB = 9.0;

System.out.print("The result is " + operation.getResult());
   /*OperationAdd add = new OperationAdd();
   add.numberA= 1;
   add.numberB= 2;
   System.out.print(add.getResult());*/


}}返回结果却是0.0。求解。

解决方案 »

  1.   

    你的Operation里定义了两个变量,你在其子类里又定义了两个你给父类的变量赋值了,但是你实际用的却是子类的两个变量
    把子类的那两个变量统统删掉
      

  2.   


    abstract class Operation {
    private double numberA;
        private double numberB;
        public double getNumberA() {
    return numberA;
    }
    public void setNumberA(double numberA) {
    this.numberA = numberA;
    }
    public double getNumberB() {
    return numberB;
    }
    public void setNumberB(double numberB) {
    this.numberB = numberB;
    }
    public abstract double getResult();
    }class OperationAdd extends Operation {
        public double getResult() {
            double result = 0;
            result = getNumberA() + getNumberB();
            return result;
        }
    }
    class OperationSub extends Operation {
        public double getResult() {
            double result = 0;
            result = getNumberA() - getNumberB();
            return result;
        }
    }
    class OperationMul extends Operation {
        public double getResult() {
            double result = 0;
            result =getNumberA()* getNumberB();
            return result;
        }
    }
    class OperationDiv extends Operation {
        public double getResult() {
            double result = 0;
            result = getNumberA() / getNumberB();
            if (getNumberB() == 0) {
                try {
                    throw new Exception();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    }
    class OperationFactory {
        public static Operation createOperation(char operate) {
            Operation oper = null;
            switch (operate) {
            case '+':
                oper = new OperationAdd();
                break;
            case '-':
                oper = new OperationSub();
                break;
            case '*':
                oper = new OperationMul();
                break;
            case '/':
                oper = new OperationDiv();
                break;
            }
            return oper;
        }
    }public class Calculator {
        public static void main(String[] args) {
            Operation operation;
            operation = OperationFactory.createOperation('+');
            
            System.out.println(operation.getClass());
            
            operation.setNumberA(5.0) ;
            operation.setNumberB(9.0) ;
        
            System.out.print("The result is " + operation.getResult());        
           /*OperationAdd add = new OperationAdd();
           add.numberA= 1;
           add.numberB= 2;
           System.out.print(add.getResult());*/
        
        
        }}