【发布时间】:2013-06-17 00:56:12
【问题描述】:
public class BaseClass {
private String className;
public BaseClass() {
className = "[BaseClass]";
}
public void executeAB() {
System.out.println(className + " executingAB()");
executeA();
executeB();
}
public void executeA() {
System.out.println(this.className + " executingA()");
}
public void executeB() {
System.out.println(this.className + " executingB()");
}
}
public class SubClass extends BaseClass {
private String className;
public SubClass() {
this.className = "[SubClass]";
}
public void executeA() {
System.out.println(className + " executingA()");
}
public void executeC() {
System.out.println(className + " executingC()");
}
public static void main(String[] args) {
BaseClass t = new SubClass();
t.executeAB();
// t.executeC();
}
}
在上述情况下,调用 t.executeAB() 会导致输出:
[BaseClass] 执行AB()
[子类]执行A()
[BaseClass] 执行B()
我的问题是:
BaseClass 如何知道 SubClass 的 excuteA() 方法,同时 t.executeC() 调用是 not possible 因为 BaseClass 不知道 executeC()。
【问题讨论】:
-
答案是 BaseClass 不知道如何或是否重写方法,而 OOP 的魔力在于它不必知道。这一切都由dynamic dispatch table 方法在幕后处理。
-
这是在 OOP 中具有继承的基本原因之一。
标签: java oop inheritance overriding