将父类调用为子调用-java

时间:2015-05-14 22:07:36

标签: java class casting subclass extends

我有两个班级:

public class Expression {
  public Expression(){};
    public  void Submeet_In_Expression(double i){};

    public  void Just_Submeet(Double double1){};

    public   double GetValue(){
        return -1;
    };
}

和一个扩展类:

public class ExpressionA extends Expression{
    double ans; 
    public ExpressionA(){
        ans=1;
    }
    public void Submeet_In_Expression(double i){
        ans= (ans*(Math.pow(-1,i)/(2*i+1)));
    }
    public void Just_Submeet(Double i) {
        ans*=i; 
    }

    public double GetValue(){
        return ans;
    }

}

在其中一个函数中我得到了一个ExpressionA(我有ExpressionB,ExpressionC等)以及我将表达式转换为我将从用户那里获得的内容。

1 个答案:

答案 0 :(得分:0)

您不能将超类强制转换为子类。

  

通过使用演员你基本上告诉编译器“相信我。我是专业人士,我知道我在做什么,我知道,虽然你   不能保证,我告诉你这个动物变量是   肯定会成为一只狗。“

     

由于动物实际上不是狗(它是动物,你可以做到   动物动物=新狗(); VM投掷了一个   运行时异常,因为你违反了那个信任(你告诉过   编译器一切都会好的,但事实并非如此!)

     

编译器比盲目接受一切更聪明一点,   如果你尝试在不同的继承层次结构中强制转换对象(强制转换)   例如,一个狗到一个字符串)然后编译器会把它扔回去   你是因为它知道它永远不会起作用。

     

因为你实际上只是停止编译器   抱怨,每次你施展都很重要,检查你   通过在if中使用instanceof不会导致ClassCastException   陈述(或者说那种效果。)

已经回答here