为什么在扩展任何 RIM Screen 类时建议调用 super() 构造函数?据我了解,任何超类的无参数构造函数都是从任何扩展它的类隐式调用的,我错了吗?
super() 将会被默认构造函数调用,无论你是否实现它。
很容易测试。只需几节课:
class ClassA {
public ClassA() {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform("ClassA()");
}
});
}
}
class ClassB extends ClassA {
public ClassB() {
super();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform("ClassB()");
}
});
}
}
class ClassC extends ClassA {
}
class ClassD extends ClassA {
public ClassD() {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform("ClassD()");
}
});
}
}
和测试应用程序:
class Scr extends MainScreen {
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(new MenuItem("class A", 0, 0) {
public void run() {
ClassA a = new ClassA();
}
});
menu.add(new MenuItem("class B", 0, 0) {
public void run() {
ClassB b = new ClassB();
}
});
menu.add(new MenuItem("class C", 0, 0) {
public void run() {
ClassC c = new ClassC();
}
});
menu.add(new MenuItem("class D", 0, 0) {
public void run() {
ClassD d = new ClassD();
}
});
}
}
所以你看,ClassA() 和 ClassC() 中的对话框调用没有区别,ClassB() 和 ClassD() 之间也没有区别。
不,你说得完全正确。有些人喜欢为了清楚起见而明确地把它放进去 - 我个人不是粉丝。
您可以链接到这样的建议,以便我们检查是否没有更微妙的事情发生?
您关于隐式调用无参数构造函数的说法是正确的。我非常确定 RIM JRE 也是这样做的。
我猜你偶然发现的只是臭名昭著的“超级基础初学者你好世界示例”,它甚至显式调用
super()
,以便每个java菜鸟都明白MainScreen
的构造函数也被调用。
我浏览了您链接到的页面上的大部分示例,它看起来像是复制粘贴的东西。例如,如果您检查
Using PIM functions
示例,您会注意到这里的无参数子构造函数中缺少对 super()
的调用。