假設您的用戶類有兩種方法,如methoda
和methodb
。我們創建了這個類的兩個實例a
和b
。現在我想更新我的代碼,methoda
應該是可見的,只有實例a
和methodb
應該對實例b
可見。我沒有得到我們如何在Java中實現這一點。對於同一類別的不同實例的Java方法限制
回答
不,方法可見性始終基於類型,而不是單個實例。聽起來也許你應該有兩個小類,一個是methodA
,另一個是methodB
;您可以創建相應子類的實例。
如果a
和b
都是同一類的實例,則不能這樣做。這兩個實例都有相同的方法(即OOP中的行爲)。
你可以做這樣的:
public interface InterfaceA { void methodA(); }
public interface InterfaceB { void methodB(); }
public class User implements InterfaceA, InterfaceB {
public void methodA() { System.out.println("method A"); }
public void methodB() { System.out.println("method B"); }
}
//一些別的地方
InterfaceA a = new User();
InterfaceB b = new User();
現在,a
「看見」 只有methodA()
和b
「看見」 只有methodB()
我認爲沒有其他辦法可以做到這一點。
這確實是要走的路。使用接口來限制引用的行爲可能是安全設計最重要的設計模式。 – 2012-02-02 07:46:17
你需要使用多態性和hage回答你的問題。
瞭解在多態性讀取過程中會發生什麼。
- 編譯器查看對象的聲明類型和方法名稱。比方說, 我們稱之爲
x.fun(param)
,並且隱含參數x被聲明爲C類的一個對象
注意,可能有多種方法,都具有相同的名稱,好玩的,但具有不同的 參數類型。例如,可能有一個方法f(int)和一個方法f(String)。 編譯器列舉了類C中所有稱爲fun的方法以及所有在C的超類中稱爲fun的公共/受保護方法fun。現在,編譯器知道調用方法的所有可能候選者。
接着,編譯器確定的類型被在 方法調用提供的參數。如果在所有被稱爲樂趣的方法中有一種獨特的方法,其參數類型是所提供的參數的最佳匹配,則該方法是 被選擇調用。這個過程被稱爲超載分辨率。
如果方法是私有的,靜態的,最終的或構造函數,那麼編譯器確切地知道調用哪個方法。編譯器然後使用靜態綁定。 否則,如果要調用的方法取決於隱式參數的實際類型,則編譯器使用動態綁定。
當程序運行,並使用動態綁定來調用一個方法,則虛擬機 必須調用適合於實際類型的 目的是其中x是指該方法的版本。
假設實際類型是D,C的一個子類。如果類D定義了一個方法fun(String),那麼調用該方法。 如果不是,則搜索D的超類,以搜索方法fun(String),等等。每次調用某個方法時執行此搜索將非常耗時。 因此,虛擬機會爲每個類預先計算一個方法表,其中列出了所有方法簽名和要調用的實際方法。當一個方法實際上調用 時,虛擬機只是簡單地進行表查找。
- 1. Java Refring不同類的對象實例
- 2. 從同一類的不同實例訪問私有方法
- 3. 類方法對於類的每個實例都有不同的代碼嗎?
- 4. iPhone pushViewController同一類的不同實例
- 5. 同類別不同對象的同步方法
- 6. 如何調用一個類的實例,實例方法從不同的類
- 7. 針對不同API級別的不同Java方法
- 8. Scala:兩個不同類的實例,相同的方法
- 9. Java:如何從不同類實例化的不同對象中調用具有相同名稱的方法?
- 10. 實例方法JAVA中的同步
- 11. 如何從同一類的另一個實例方法調用實例方法?
- 12. 是一個對象(某個類的實例)的方法與Ruby中它的類的實例方法相同嗎?
- 13. 從java中的類中實例化同一類的對象
- 14. 爲什麼java可以「混合」同一類的不同實例?
- 15. 如何用不同的方法創建一個類的實例?
- 16. 將實例方法的參數限制爲實例的類型
- 17. 在同一行上分配同一類別的多個實例
- 18. Java以相同類別的另一種方法調用方法
- 19. 對同一類別的幾個實例的Foreach循環
- 20. 創建一個同時是實例和類方法的方法
- 21. 在同一類的不同對象上設置實例變量
- 22. 吉斯實例不同類別與不同的供應商
- 23. 創建類實例的不同方式
- 24. 的Java:從不同類別
- 25. 如何從同一級別的實例方法調用的實例方法內訪問實例變量
- 26. 根據實例類別限制特徵方法
- 27. 對於不同的意圖對象的同一活動的多個實例
- 28. Java - 在用同一類的另一種方法實例化的方法中使用對象
- 29. 在不同類別的相同實例C++
- 30. 從同一類中的另一種方法在類實例中調用方法
怎麼樣實例C和D等?我的意思是方法應該是可見的或不是? – 2012-02-02 07:41:37