2016-09-05 71 views
3

我練習和簡單的運動,給定定義爲具有下列方法FeatureFilm類:由編譯器(簡單的Java運動)允許的方法頭

public void update(Actor a, String title) 
public void update(Actor a, Actor b, String title) 
public void update(String topic, String title) 

下列哪些額外的方法頭會編譯器允許嗎?

public boolean update(String category, String theater) 
public boolean update(String title, Actor a) 
public void update(Actor b, Actor a, String title) 
public void update(Actor a, Actor b) 

所以,我做的代碼和編譯器不允許這種方法:public boolean update(String category, String theater)public void update(Actor b, Actor a, String title),但我不完全理解爲什麼。有人可以向我解釋這個嗎? 我希望能夠充分利用這個網站。我是OPP初學者。 對不起,我的(可憐的)英語, 謝謝。

+2

[你在這裏](https://docs.oracle.com/javase/tutorial/java/javaOO/methods。html) – Maroun

+0

編譯器如何在'public void update(String topic,String title)'和'public boolean update(String category,String theater)'之間進行選擇? 或者'public void update(Actor a,Actor b,String title)'和'public void update(Actor b,Actor a,String title)'之間? –

回答

1

Java中的一個方法的簽名由數量,類型的布爾值,以及參數的順序,但不是的返回類型。

不允許:

public boolean update(String category, String theater) 
public void update(Actor b, Actor a, String title) 

這些方法具有相同的簽名作爲已經出現的,並且返回類型並不確定簽名。這裏的訣竅是即使返回類型不同,簽名仍然是相同的。

允許:

public boolean update(String title, Actor a) 
public void update(Actor a, Actor b) 

這些方法從已出現的那些不同的簽名,因爲類型和參數的順序是不同的。

+0

非常感謝你對我的問題的非常有幫助和詳細的迴應! – Nami

5

由於不允許具有相同參數類型和不同返回類型的方法。 所以:

public void update(String topic, String title)public boolean update(String category, String theater)有兩個字符串作爲參數,但第一個是無效,第二個返回

+0

@Downvoter:請這麼公平,解釋一下爲什麼! – Jens

+2

你暗示的問題是不同的返回類型,實際上問題是*不同的返回類型*。 – shmosel

4

Java方法的簽名包括:

  • 方法名
  • 的類型和參數順序(例如foo(String, Date)foo(Date, String)

這些的不部分方法的簽名

  • 返回類型
  • 參數名稱(例如, foo(int a, int b)foo(int b, int a)

類中沒有兩個方法可能具有相同的簽名。

+1

也許[鏈接到JLS的相關部分](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2)也會有幫助嗎? :) –

+0

非常感謝,你們都非常有幫助 – Nami

相關問題