2014-06-16 130 views
0

說我有一個超類和一個如下所示的子類。使用構造函數時的靜態類和動態類

class Super { 
public void action() { 
System.out.println(「Super’s action」); 
} 
} 

class Sub extends Super() { 
public void action() { 
System.out.println(「Sub’s action」); 
} 
} 

在我的主要方法中,我稱之爲。

Super s1 = new Super(); 
s1.action(); 

Super s2 = new Sub(); 
s2.action(); 

Sub s3 = new Sub(); 
s3.action(); 

我知道,輸出將是

Super’s action 
Sub’s action 
Sub’s action 

我瞭解到,在構造函數中,第一個字是靜態類類型,與(部分)是動態類。 我知道方法查找將始終在動態類中開始,所以我想知道的是,s2和s3之間有什麼區別? 即具有靜態類是父類的,或靜態類是它自己的類型

+1

將另一個方法放在'Sub'中,嘗試從's2'和's3'中調用它,然後你會回答你自己的問題。 – awksp

+0

在什麼情況下?它們只是用不同的類型,編譯時(或靜態)類型聲明的。 –

+0

看看我的答案[這裏](http://stackoverflow.com/a/24113813/391161)。 – merlin2011

回答

0

如果Sub定義,是不是在Super的方法,則無法從s2調用它。另外,如果方法採用Sub類型的參數,則不能將s2傳遞給它。