所以,假设我有A类,其定义如下:
public class A{
private int x;
public A(){
this(13);
}
public A(int x){
this.x = x;
}
}
然后我有一个需要实现y的B类,所以这样:
public class B extends A{
private int y;
public B(){
}
public B(int x){
this(x, 0);
}
public B(int x, int y){
super(x);
this.y = y;
}
}
我的问题是:我在public B()
做什么?我是否调用super()以便A分配默认值/执行任何操作,然后在该构造函数中执行另一个this.y = y
,或者调用this(13)
?
这两种方法似乎都需要一些不良做法。一个人让我在两个地方写this.y = y
。另一个要求我重复默认值,每次更改默认值时都需要更改。
答案 0 :(得分:1)
如果字段不是最终字段,则可以在声明它们的位置指定默认值。所以代码看起来像:
jData = '<div class=\"hotspot F1hs sash\" id=\"F1\” >’
var radios = $(".rectangleRadios.active").children("input").val();
var windowName = $.urlParam('windowid’); // This is the F1. It comes from a URL parameter and will change from page to page.
var updateFrame = new RegExp(windowName+'hs','g’); //Creates the F1hs
var id = new RegExp('\\" id=\\"'+windowName,'g’); // Creates the “ id=F1
答案 1 :(得分:0)
如果在构造函数的第一行没有对继承的构造函数的调用,则将调用继承类的默认构造函数。如果没有默认构造函数,那么你必须在构造函数的第一行定义它应该使用哪个超级构造函数。
public class A{
public A(){
}
public A(String text){
}
}
public class B extends A{
public B(){
//having nothing is same as super();
//here you can also call the other constructor
//super(""); is allowed
}
public B(String text){
//having nothing is same as super();
//but if you add a super(text) then you set this instance to super(text); instead
}
}
public class C{
public C(String text){
}
}
public class D extends C{
public D(){
super();// this is incorrect and will not compile
}
public D(String text){
super(text);//this is fine
}
}
希望这会有所帮助。