Java 如何将分数对象转换为双对象?

Java 如何将分数对象转换为双对象?,java,casting,Java,Casting,当我学习Android时,我可以将一个对象类型转换为其他类型,如下所示: TextView txtHello = (TextView) view; 其中view被定义为view,我认为,TextView是view的一个子类。现在,我有一个分数类,下面是它的内容: public class Fraction { private int numerator; private int denominator; public Fraction() { num

当我学习Android时,我可以将一个对象类型转换为其他类型,如下所示:

TextView txtHello = (TextView) view;
其中
view
被定义为
view
,我认为,
TextView
view
的一个子类。现在,我有一个
分数
类,下面是它的内容:

public class Fraction {

    private int numerator;
    private int denominator;

    public Fraction() {
        numerator = 0;
        denominator = 1;
    }

    public Fraction(int value) {
        numerator = value;
        denominator = 1;
    }

    public Fraction(int numerator, int denominator) throws ArithmeticException {
        if (denominator == 0) {
            throw new ArithmeticException("Denominator can not be 0!");
        }
        if (denominator < 0) {
             denominator *= -1;
             numerator *= -1;
        }
        this.numerator = numerator;
        this.denominator = denominator;
        this.simplify();
    }

    public double toDouble() {
        return (double) numerator / (double) denominator;
    }

    @Override
    public String toString() {
        return String.format("%d/%d", numerator, denominator);
    }

    public int getNumerator() {
        return numerator;
    }

    public int getDenominator() {
        return denominator;
    }

    private void simplify() {
        int x = getGreatestCommonDivisor(numerator, denominator);
        numerator /= x;
        denominator /= x;
    }

    private int getGreatestCommonDivisor(int x, int y) {
        x = x < 0 ? -x : x;
        y = y < 0 ? -y : y;
        if (x == 0 || y == 0) {
            return x + y;
        }
        while (x != y) {
            if (x > y) {
                x = x - y;
            } else {
                y = y - x;
            }
        }
        return x;
    }
}
两行都是错误:

Double d1 = (Double) frac;
double d2 = (double) frac;

我知道我可以通过调用
toDouble
方法将
分数
转换为
double
。但我想知道如何做,就像我在安卓系统中所知道的那样。我试图使
分数
扩展
Double
Double
最终的
类。如果我将一个新类创建为
Double
,我如何执行上面的任何行代码,
d1
d2
frac
的真正值?

您不能强制转换,因为它们是不相关的类型

对于引用类型(如
Fraction
Double
),casting实际上并不构建casted to type-
(Double)frac
的新实例,它只是对编译器说:“相信我,我知道这个
Fraction
实际上是一个
Double
,让我把它作为一个来使用。”

但是,编译器知道
Double
不在
Fraction
的继承层次结构中,因此它知道对
Fraction
的引用不可能真正成为
Double
,因此它禁止强制转换

但是您有一种方法允许将
分数
转换为
双精度

double d2 = frac.toDouble();
若我创建了一个新的类作为Double,那个么我该如何处理上面的任何行代码,而d1和d2实际上是frac的值

在Java中,如果不破解核心库,就无法做到这一点,这是不应该做的

您可以做的是扩展Double的父项Number

Number num = new Fraction(2, 3); // if Fraction extends Number
Number d = 1.33;

Java不允许按您期望的方式使用自定义强制转换运算符。
toDouble()
有什么问题吗?你所要求的是不可能的。这是我的简单例子。我的问题是:如果我创建一个新类,例如,Number和makefraction扩展Number。这个代码行吗<代码>数字=(数字)压裂ỳnh是的,但是演员阵容是多余的。您只需编写
Number num=frac如果分数扩展了数字
。谢谢大家!现在我知道了代码
TextView txtHello=(TextView)如何查看在Android中工作,我错在哪里!谢谢你,安迪·特纳!现在我知道了代码
TextView txtHello=(TextView)如何查看在Android中工作,我错在哪里!谢谢你,彼得·劳瑞!现在我知道了代码
TextView txtHello=(TextView)如何查看在Android中工作,我错在哪里!
Number num = new Fraction(2, 3); // if Fraction extends Number
Number d = 1.33;