2017-04-01 51 views
0

現在就進入一些Java。在OCA 7書中看到了這個擴展類,並且只是想知道類Baz使用go方法的可能性,並且期望返回類型爲String,但參數需要一個int。然後返回null。Java類方法定義了String類型,將int作爲參數並返回null

Baz是一個合法的構造還是會返回編譯錯誤?我的意思是它返回String類型,但接受一個int參數,然後返回null。這怎麼可能?

public class Foo { 
    void go() {} 
} 

public class Baz extends Foo { 
    String go(int x) { 
     return null; 
    } 
} 
+3

'go()'和'go(int)'是相當[不同的方法](https://docs.oracle.com/javase/教程/ JAVA/javaOO/methods.html)。不要混淆他們有相同的名字。他們的簽名是不同的。 – dhke

+0

@dhke我不認爲他關心繼承。他只是感到困惑,它應該返回'String'時返回'null'。 – Gendarme

+0

「巴茲是合法的建築還是這個返回編譯錯誤?」那麼,當你嘗試它時發生了什麼? –

回答

2

由於Baz延伸Foo它將繼承Foogo()方法。

另外Baz聲明瞭自己的方法,稱爲go(int x),返回類型爲String。這是兩種不同的方法,編譯器將它們視爲這樣,因爲它們具有不同的signature(=名稱+參數類型)。如果唯一的區別是返回類型,那麼你會得到一個編譯錯誤。

由於簽名不同,編譯器總是可以告訴您要調用哪種方法 - 在這種情況下,取決於在調用go時是否傳遞int作爲參數。

這就是爲什麼Baz是完全有效的Java類。

編輯:go(int x)可以返回null,因爲String是一類。當期望對類的實例的引用時,您始終可以傳遞/返回null。 (方法參數根本不重要,爲什麼這是可能的)

+0

是的,它意味着返回類型的字符串,但採取一個int參數,然後返回null。這怎麼可能? – mdarmanin

+0

@emporio參數與返回類型完全無關。爭論的唯一理由是能夠將信息傳遞到方法中 - 無論你如何處理它。 – Gendarme

+0

@emporio編輯是否闡明瞭這個方面? – Keiwan

相關問題