示例
public abstract class Foo{
private int dim1;
public Foo(int dim1) {
super();
this.dim1 = dim1;
}
public Foo() {
this.dim1 = 0;
}
}
2。为什么在上面的示例中的非参数化构造函数中调用了super()
方法?
如果我忘记或者我不想使用super()
调用Object类中的构造函数会发生什么?
调用super()
方法(Unparametrized Object's
类构造函数)的类是否抽象是否重要?
答案 0 :(得分:2)
当类已经有一个参数化构造函数和一个非参数化构造函数时,为什么一个类调用该对象的Object默认构造函数?
仅仅因为你拥有它,并不意味着它会被自动调用。你必须调用它,这就是对象实例化开始的地方。
为什么上面示例中的非参数化构造函数中没有调用super()方法?
这不是一种方法。它只是调用超类默认构造函数。您知道吗,如果您没有调用它,Java编译器会自动插入该语句,同时为您提供字节代码。所以你不需要在子构造函数中写super()
,除非你想调用特定的构造函数。
如果我忘记或者我不想使用super()调用Object类中的构造函数会发生什么?
别担心。如上所述,编译器会为您插入它。
调用super()方法的类(Unparametrized Object的类构造函数)是否抽象是否重要?
是的,抽象与否并不重要。它只是调用超类构造函数。
答案 1 :(得分:1)
1)你可能不应该。这是不必要的。这是一行额外的代码,没有做任何事情。
2)因为如果你的对象没有扩展Object以外的类(就像所有类一样),显式调用super()
是完全没有必要的。你可以从第一个构造函数中删除它,什么都不会改变。代码编译相同。
3)没什么。你不需要这样做。
4)这没什么区别。