所以我一直在研究抽象類和動態綁定,並決定測試幾個例子。抽象類和動態綁定
我有以下3個類:AbstractDemo(main),MyAbstract和MySubAbstract。主要方法是使用動態或靜態綁定從兩個類中調用方法。
除了最後一個我嘗試使用動態綁定並調用僅在子類(sub1())中定義的方法之一以外的所有以下調用都起作用。我假設儘管被超類的引用聲明,對象仍然能夠找到在該對象的類中聲明的方法。
有人可以解釋爲什麼嗎?
public abstract class MyAbstract {
public abstract void abs1();
public abstract void abs2();
public void nonAbs1() {
System.out.println("MyAbstract nonAbs1");
}
public void nonAbs2() {
System.out.println("MyAbstract nonAbs2");
}
}
public class MySubAbstract extends MyAbstract {
public void abs1() {
System.out.println("MySubAbstract abs1()");
}
public void abs2() {
System.out.println("MySubAbstract abs2()");
}
public void sub1() {
System.out.println("MySubAbstract sub1()");
}
public void sub2() {
System.out.println("MySubAbstract sub2()");
}
public void nonAbs1() {
System.out.println("MySubAbstract nonAbs1()");
}
}
public class AbstractDemo {
public static void main(String[] args) {
MySubAbstract a = new MySubAbstract(); a.abs1();
MySubAbstract b = new MySubAbstract(); b.sub1();
MySubAbstract c = new MySubAbstract(); c.nonAbs2();
MySubAbstract d = new MySubAbstract(); d.nonAbs1();
MySubAbstract e = new MySubAbstract(); e.nonAbs2();
MyAbstract f = new MySubAbstract(); f.abs1();
MyAbstract g = new MySubAbstract(); g.nonAbs1();
MyAbstract h = new MySubAbstract(); h.sub1();
}
}
的[調用從父類對象的子類中的方法]可能的複製(http://stackoverflow.com/questions/11466441/call-a-child-class-method-from -a-parent-class-object) –