我有一個超類:java的覆蓋方法調用
public class SuperClass {
public void dosomething() {
firstMethod();
secondMethod();
}
public void firstMethod() {
System.out.println("Super first method");
}
public void secondMethod() {
System.out.println("Super second method");
}
}
一個子類:
public class SubClass extends SuperClass {
public void dosomething() {
super.dosomething();
}
public void firstMethod() {
System.out.println("Sub first method");
}
public void secondMethod() {
System.out.println("Sub second method");
}
}
測試類:
public static void main(String[] args) {
SubClass sub = new SubClass();
sub.dosomething();
SuperClass sup = new SuperClass();
sup.dosomething()
}
當運行測試方法
,我得到了這個:
Sub first method
Sub second method
你能告訴我這是怎麼發生的嗎?在子類dosomething
方法中,我調用了super.dosomething()
,我認爲將調用super方法,但子類中的override方法被調用。
如果我這樣做:
SuperClass superClass = new SuperClass();
superClass.dosomething();
結果爲:
中超第一種方法
超級第二種方法
不同的是方法調用的地方。我覺得一定有什麼東西我不`噸知道!):
哎呀super引用指向第一個例子中的子類...
這樣的:
SuperClass sub = new SubClass();
sub.firstMethod();
sub.secondMethod();
我認爲這個功能是非常有用的,但我只是不知道它是如何工作的詳細:( – Felix 2012-02-15 10:12:54
@Felix:什麼不你瞭解它嗎?它是你的對象的運行時類型的重要,而不是變量定義的類型。 – 2012-02-15 14:01:57