[英]what happens when Calling Overridden method from with in it?
i was writing Rational class in java to do basic math operation and i want to override methods from Number class and Comparable interface .我在 java 中编写Rational class 来进行基本的数学运算,我想覆盖来自Number class和Comparable interface的方法。 i have done that for doubleValue & compareTo methods.我已经为doubleValue和compareTo方法做到了。
As we know that BigInteger class also extends Number class , so i am confused that which method is being called in doubleValue because i have already override doubleValue & compareTo and calling doubleValue with in doubleValue & compareTo with in compareTo .我们知道BigInteger class也扩展了Number class ,所以我很困惑在doubleValue中调用了哪个方法,因为我已经覆盖了doubleValue和compareTo并在doubleValue和compareTo中调用了doubleValue 。 and it's seems silly too.这似乎也很愚蠢。
import java.math.BigInteger;
class Rational extends Number implements Comparable<Rational>{
// Data fields for numerator and denominator
private BigInteger numerator = BigInteger.ZERO;
private BigInteger denominator = BigInteger.ONE;
// Construct a rational with default properties
Rational(){
numerator = BigInteger.ZERO;
denominator = BigInteger.ONE;
}
Rational(BigInteger numerator,BigInteger denominator){
BigInteger gcde = numerator.gcd(denominator);
BigInteger temp = BigInteger.valueOf( (long)(denominator.compareTo(BigInteger.ZERO)) );
this.numerator = temp.multiply(numerator.divide(gcde));
this.denominator = (denominator.abs()).divide(gcde);
}
// subtract a rational number to this rational a/b - r.a/r.b = a*r.b - r.a*b/r.b*b
public Rational subtract(Rational r){
BigInteger n = (numerator.multiply(r.getDenominator())).subtract(denominator.multiply(r.getNumerator()));
BigInteger d = denominator.multiply(r.getDenominator());
return new Rational(n,d);
}
// Return numerator
public BigInteger getNumerator(){
return numerator;
}
// Return denominator
public BigInteger getDenominator(){
return denominator;
}
@Override // Implement the abstract doubleValue method in Number
public double doubleValue(){
return numerator.doubleValue()/denominator.doubleValue();
}
@Override // Implement the abstract longValue method in Number
public long longValue(){
return (long)doubleValue();
}
@Override
public int compareTo(Rational r){
return (this.subtract(r).getNumerator()).compareTo(BigInteger.ZERO);
}
}
public double doubleValue(){
return numerator.doubleValue()/denominator.doubleValue();
}
numerator
is a BigInteger
so BigInteger.doubleValue()
is being called. numerator
是BigInteger
所以BigInteger.doubleValue()
被调用。 Same with denominator
.与denominator
相同。 It does not matter that your class also happens to have a doubleValue()
function.没关系,您的 class 也恰好有一个doubleValue()
function。 numerator
and denominator
are a different class than your Rational
class. numerator
和denominator
是不同于Rational
class 的 class。
Number / \ BigInteger Rational | | doubleValue doubleValue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.