我有两个班级:
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等)以及我将表达式转换为我将从用户那里获得的内容。
答案 0 :(得分:0)
您不能将超类强制转换为子类。
通过使用演员你基本上告诉编译器“相信我。我是专业人士,我知道我在做什么,我知道,虽然你 不能保证,我告诉你这个动物变量是 肯定会成为一只狗。“
由于动物实际上不是狗(它是动物,你可以做到 动物动物=新狗(); VM投掷了一个 运行时异常,因为你违反了那个信任(你告诉过 编译器一切都会好的,但事实并非如此!)
编译器比盲目接受一切更聪明一点, 如果你尝试在不同的继承层次结构中强制转换对象(强制转换) 例如,一个狗到一个字符串)然后编译器会把它扔回去 你是因为它知道它永远不会起作用。
因为你实际上只是停止编译器 抱怨,每次你施展都很重要,检查你 通过在if中使用instanceof不会导致ClassCastException 陈述(或者说那种效果。)
已经回答here。