我正在创建一个扩展BigInteger类的类ExtendBigInt
,并且需要能够将默认值设置为0.但是,由于无法编辑BigInteger,如何在子类中创建无参数构造函数?当我尝试创建没有参数的子类的构造函数时,它会抛出此错误Implicit super constructor BigInteger() is undefined. Must explicitly invoke another constructor
import java.math.BigInteger;
public class ExtendBigInt extends BigInteger{
public ExtendBigInt() {
}
public static void main(String[] args) {
//BigInteger one = new BigInteger("0");
//BigInteger two = new BigInteger("1111111111111111111111");
//BigInteger result = one.subtract(two);
//System.out.println(one); // -1111111111110987654322
//double down = result.doubleValue(); // returns a double
//System.out.println(down); // -1.1111111111109876E21
//System.out.println(one.toString()); // 123456789
//System.out.println(result.subtract(two)); // -2222222222222098765433
//System.out.println(one.multiply(two)); // 137174209999999999999986282579
//System.out.println(result.multiply(result).multiply(result).multiply(result));
// 1524157902758048400486511315461168814591948287890638869506006559674928884826743139856
//System.out.println(BigInteger.ONE); // Commonly used BigInteger("1")
}
}
答案 0 :(得分:1)
只做
public ExtendBigInt() {
super("0");
}
BigInteger
中没有空构造函数,因此您会收到该错误
答案 1 :(得分:0)
你的问题的字面答案是调用super(0)
,正如@ShashwatKanna已经指出的那样。
但也许另一种解决方案可能会更好地解决您的问题:不要扩展BigInteger
。
从您的示例中,我没有看到您的课程应该扩展BigInteger
的原因。您可以在任何您喜欢的课程中使用BigInteger
算术,而无需扩展BigInteger
,例如:
import java.math.BigInteger;
public class ExtendBigInt {
public static void main(String[] args) {
BigInteger one = new BigInteger("0");
BigInteger two = new BigInteger("1111111111111111111111");
BigInteger result = one.subtract(two);
System.out.println(one);
double down = result.doubleValue();
System.out.println(down);
System.out.println(one.toString());
System.out.println(result.subtract(two));-2222222222222098765433
System.out.println(one.multiply(two));
System.out.println(result.multiply(result).multiply(result).multiply(result));
System.out.println(BigInteger.ONE);
}
}
您的public ExtendBigInt() { ... }
构造函数没有用,因为您的代码中没有new ExtendBigInt(...)
调用。
如果你真的想扩展BigInteger
,那么我没有看到只有一个no-args构造函数的有效用例:
BigInteger
意味着创建具有无限大小(BigInteger
s)的整数的对象以及一些其他属性(字段,方法,行为......)。 no-args构造函数只能创建一个常量值,可能为0,以后不能更改,因此它只会创建一个“ExtendBigZero”。public ExtendBigInt(String digits) { ... }
构造函数或类似的东西,允许您创建值不等于零的实例。ExtendBigInt
与BigInteger
实际上是不同的 - 如果ExtendBigInt
的行为完全相同一个BigInteger
,为什么要有不同的班级?