在java中,类中的构造函数可以调用它的重载构造函数 超类(如果我们想明确地进行调用,那么 故意)。
我知道类中的构造函数会进行隐式调用
no-arg超类的默认构造函数(带super();
)。但是假设我
调用一个重载的超类构造函数(比如super(String s);
),然后我的问题是,这可能吗?如果这是可能的话,那么
是super()
之前仍然在super(String s)
之前发出的号召是什么
它的含义是什么?
答案 0 :(得分:3)
是的,您可以调用超类的重载构造函数。这应该是构造函数中的第一个语句。
不,你只能调用一次超类的构造函数,因此对super(args)
的调用会将隐式调用替换为super()
。例如:
public class A {
private String fieldA;
public A(String a) {
fieldA = a;
}
}
public class B extends A {
private int fieldB;
public B(String a, int b) {
// Call the overloaded constructor of the class A
super(a); // replaces the implicit call to super()
fieldB = b;
}
}
但如果你这样做,你会收到一个错误,因为对super()
的调用不是构造函数的第一个语句:
public B(String a, int b) {
fieldB = b;
super(a); // Call to super() must be first statement in constructor body
}
答案 1 :(得分:0)
是的,我们可以覆盖超类的构造函数调用,同时覆盖 超类的默认构造函数调用它不会跳过/避免调用 默认构造函数调用。
请参阅此代码,并查看输出
$(function() {
$('.scale').hover(function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', 'yellow');
$previous = $previous.prev();
}
}, function() {
var $previous = $(this);
while ($previous.length && $previous.hasClass('scale')) {
$previous.css('background-color', '');
$previous = $previous.prev();
}
})
});