我不敢相信我在这里没有找到任何关于这个问题的东西,所以:
为什么在派生类时需要显式定义超类的所有构造函数。当派生类不提供具有该签名的超级构造函数时,为什么 Java 不会自动调用超级构造函数。
那将是一些不错的“语法糖”。
例如:在 Android 中,每个视图子类提供 3 个从 XML 或代码调用的构造函数。为了能够在代码和 XML 中创建自定义视图,我需要定义所有三个构造函数,即使它们不做任何事情。这是我昨天写的一个小例子
public class OverfocusableGridView extends GridView {
public OverfocusableGridView(Context context) {
super(context);
}
public OverfocusableGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public OverfocusableGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean keyHandled = false;
if (this.getSelectedView() != null) {
int focusedViewPosition = this.getSelectedItemPosition();
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (focusedViewPosition > 0) {
int prevItemPosition = focusedViewPosition - 1;
this.setSelection(prevItemPosition);
keyHandled = true;
}
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (focusedViewPosition < this.getChildCount() - 1) {
int nextItemPosition = focusedViewPosition + 1;
this.setSelection(nextItemPosition);
keyHandled = true;
}
break;
default:
keyHandled = super.onKeyDown(keyCode, event);
}
} else {
keyHandled = super.onKeyDown(keyCode, event);
}
return keyHandled;
}
}
如果我不需要定义这些构造函数会更好。这种方法是否有任何缺点,或者是否有一些 Java 设计决策可以解释这一点?
所以,长话短说:这不可能是有原因的吗?