子类中的默认构造函数 Java
Default Constructor in the Subclass Java
我正在创建一个扩展 BigInteger class 的 class ExtendBigInt
并且需要能够将默认值设置为 0。但是,由于无法编辑 BigInteger,如何我在子 class 中创建了一个无参数构造函数?当我尝试创建不带参数的子 class 的构造函数时,它会抛出此错误 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")
}
}
随心所欲
public ExtendBigInt() {
super("0");
}
BigInteger
中没有空的构造函数,因此你会得到那个错误
正如@ShashwatKanna 已经指出的那样,您问题的字面答案是调用 super(0)
。
但也许另一种解决方案可能会更好地解决您的问题:不扩展 BigInteger
.
从您的示例中,我看不出您的 class 想要扩展 BigInteger
的原因。您可以在任何您喜欢的 class 中使用 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
,那么我看不到只有无参数构造函数的有效用例:
- 扩展
BigInteger
意味着创建无限大小的整数对象 (BigInteger
s) 以及一些附加属性(字段、方法、行为...)。无参数构造函数只能创建一个常量值,可能是 0,以后不能更改,因此它只会创建一个 "ExtendBigZero".
- 你至少应该添加一个
public ExtendBigInt(String digits) { ... }
构造函数或类似的东西,允许你创建值不同于零的实例。
- 您的 class 中应该有一些额外的字段或方法(不是静态的),因此
ExtendBigInt
与 BigInteger
实际上是不同的东西 - 如果 ExtendBigInt
的行为与 BigInteger
完全相同,为什么会有不同的 class?
我正在创建一个扩展 BigInteger class 的 class ExtendBigInt
并且需要能够将默认值设置为 0。但是,由于无法编辑 BigInteger,如何我在子 class 中创建了一个无参数构造函数?当我尝试创建不带参数的子 class 的构造函数时,它会抛出此错误 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")
}
}
随心所欲
public ExtendBigInt() {
super("0");
}
BigInteger
中没有空的构造函数,因此你会得到那个错误
正如@ShashwatKanna 已经指出的那样,您问题的字面答案是调用 super(0)
。
但也许另一种解决方案可能会更好地解决您的问题:不扩展 BigInteger
.
从您的示例中,我看不出您的 class 想要扩展 BigInteger
的原因。您可以在任何您喜欢的 class 中使用 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
,那么我看不到只有无参数构造函数的有效用例:
- 扩展
BigInteger
意味着创建无限大小的整数对象 (BigInteger
s) 以及一些附加属性(字段、方法、行为...)。无参数构造函数只能创建一个常量值,可能是 0,以后不能更改,因此它只会创建一个 "ExtendBigZero". - 你至少应该添加一个
public ExtendBigInt(String digits) { ... }
构造函数或类似的东西,允许你创建值不同于零的实例。 - 您的 class 中应该有一些额外的字段或方法(不是静态的),因此
ExtendBigInt
与BigInteger
实际上是不同的东西 - 如果ExtendBigInt
的行为与BigInteger
完全相同,为什么会有不同的 class?