【问题标题】:Cast parent class to son calls -java将父类转换为子调用-java
【发布时间】:2015-07-26 17:09:55
【问题描述】:

我有两个班级:

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 等),并且我将 Expression 转换为我将从用户那里得到的任何内容。

【问题讨论】:

  • 如果我是你,我会让Expression 成为一个接口并以不同的方式实现它。然后你就可以按照你的要求去做了。

标签: java class casting subclass extends


【解决方案1】:

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

通过使用强制转换,您实际上是在告诉编译器“相信我。我是专业人士,我知道自己在做什么,而且我知道尽管您 不能保证,我告诉你这个动物变量是 肯定会成为一条狗。”

由于动物实际上不是狗(它是动物,你可以这样做 动物 动物 = new Dog();它会是一条狗)虚拟机抛出一个 运行时异常,因为您违反了该信任(您告诉 编译器一切都会好的,但事实并非如此!)

编译器比盲目接受一切要聪明一点, 如果您尝试在不同的继承层次结构中转换对象(转换 例如,将 Dog 转换为 String)然后编译器会将其扔回 你,因为它知道这永远不可能。

因为您实际上只是在停止编译器 抱怨,每次你施放时,重要的是检查你 在 if 中使用 instanceof 不会导致 ClassCastException 声明(或类似的东西。)

此问题已回复here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多