子类Java

时间:2018-01-03 17:42:39

标签: java inheritance constructor extends

我正在创建一个扩展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") 

    }

}

2 个答案:

答案 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) { ... }构造函数或类似的东西,允许您创建值不等于零的实例。
  • 您的班级应该有一些额外的字段或方法(非静态),因此ExtendBigIntBigInteger实际上是不同的 - 如果ExtendBigInt的行为完全相同一个BigInteger,为什么要有不同的班级?