在java中,public/private/other方法的含義是什麼?
這些選項的優點和缺點是什麼?
作爲一個想成爲一名優秀程序員的人,我的動力是什麼?在java中,public/private/other方法的含義是什麼?
回答
當一個方法是公共這意味着它可以被其他的對象
例如被訪問:
class David {
// public method, can be use by anyone
public String getName() {
return "David";
}
}
方法getName
可以通過其它類,因爲它是公共的訪問:
class Other {
David davidOne = new David();
String davidsName = davidOne.getName(); //<-- compiles and runs
}
好處..好,你可以從其他地方使用它。
當一個方法是私人這意味着它只能通過同一類
例如對象被訪問,在這個新的定義:
class David {
public String getName() {
return "David";
}
// private method... nobody but David's "instances" can use it..
private int getAge() {
return 19;
}
}
方法getAge
可以」由其它類訪問,因爲它是私有的,如果你嘗試這樣做,編譯器會給你一個錯誤信息:
class Other {
David davidOne = new David();
String davidsName = davidOne.getName();
int davidsAge = davidOne.getAge(); //<-- Compiler error, getAge() is not visible
}
但是,如果你能大衛類中使用它:
class David {
public String getName() {
return "David";
}
// private method... nobody but David's "instance" can use it..
private int getAge() {
return 19;
}
// Here the call to "getAge()" will succeed, because it is visible
// inside the class
public boolean hasSameAgeAs(David otherDavid) {
return this.getAge() == otherDavid.getAge();
}
}
的優勢在哪裏?您可以創建一堆的方法,讓他們私有,避免數據損壞或一般保護你的對象encapsulated
關於封裝
在OOP(面向對象編程)的目的是爲了以後真正的軟件模型生活對象。
真實生活對象具有(除別的之外)訪問這些屬性的屬性和方法。
你想公開一些這些方法,並保持私人其他。
例如,一個人類有一顆心。但它不會暴露給每個人,這將是危險的。在我們身體內部是封裝。
如果我們是一個真正的人後,軟件模型,我們可以宣佈的方法:heartBeat
爲私有(所以,沒有人可以訪問它)
在另一方面,這將是非常有用的來public方法如getGender
找出您的人實例是男性還是女性。
還有其他接入改性劑如:「受保護」和保護的包(其不具有關鍵字)
class David {
// protected method
protected int getBalance() {
return 1000000;
}
// package protected or "default" method
boolean knowsOop(){
return true;
}
}
有所述方法getBalance
只能通過David
實例和David
子類accesed(創建用於什麼是子類的另一個線程)
方法knowsOop
可以由包中的任何人按照David的定義進行訪問。
不要擔心這兩個訪問修飾符,當您瞭解有關OOP和Java的更多內容時,它們將有意義。
最後,你要真的,真的需要時間來閱讀:
http://java.sun.com/docs/books/tutorial/java/javaOO/index.html
我希望這有助於
被稱爲封裝的主要原因是:不允許訪問對象的內部狀態。
你能否詳細介紹一下? – David 2010-04-15 16:55:10
對象可能有狀態;例如,它可能具有可變前景和背景顏色的屬性。該狀態將作爲某種類型的變量的值保存在對象中。實施者可能希望規定對顏色如何變化的限制(例如,兩種顏色可能不相同)。如果變量是公開的並且可以直接訪問,那麼用戶可能違反條件(又稱不變),將對象轉換爲意料之外的/非法的狀態。實現者可以使變量保密,並通過公共方法允許有效的變異。 – 2010-04-15 17:27:01
HThe public,protected和private修飾符控制其他代碼可以看到這些方法(或字段)的內容。這是關於控制你正在暴露的界面。
的很常用的有:
public修飾符:任何其他可以看到你的方法。
私人修改:沒有代碼,除了你的類和任何內部類可以看到你的方法。
例如,如果您想確保創建的類只有一個實例(singleton pattern),這些將很有用。你可以使構造私人,創建一個單一的實例和存儲作爲一個私有成員稱爲實例,並提供一個公共的方法是這樣的:
public static MyObject getInstance() {
return instance;
}
,所以你能保證將只有每一個是一個實例。
更新 - 請求的另一個示例。
另一個例子可能是你有一個複雜的公共方法,你想把它分解成更簡單的部分。你可以把它分解成簡單的方法,每個方法都是完成工作的一部分,但你不希望其他代碼調用這些方法,因爲它們不會自己工作 - 所以你可以使小方法保密,確保他們不能在你的班級以外被調用。
Private方法只能在類中調用。您可以撥打電話public您的課程在任何地方的方法。沒有訪問修飾符的方法意味着包的可見性範圍(它被稱爲默認),所以你可以在包中定義類的地方調用它。
見http://en.wikipedia.org/wiki/Object_oriented_programming#Encapsulation
一個公共方法可以從任何地方訪問,只能從同一類的私有方法。主要優點是對類的API的控制。如果我只公開需要什麼,我可以改變一個類的內部行爲,而不會根據這個類破壞代碼。你應該關心,因爲軟件在現實世界中經常發生變化(至少這是我的經驗,其他人也有這種感覺),每一次變更都會中斷,你需要投入更多的精力或者軟件有更多的錯誤。最後,這是一個成本問題。
從這個類的用戶隱藏你的類的內部以避免以後改變破壞代碼的可能性通常稱爲封裝或information hiding。
除了公共和私人的兩個選項是包(沒有修飾符)和保護。程序包可訪問的方法也可以從相同程序包的類中訪問。我不記得以任何有用的方式使用該選項。受保護的方法可以從類中進行訪問,這些類繼承了所討論的類。這通常用於爲基類定義的API創建具有具體行爲的類。例如,你可以通過擴展AbstractList來實現一個新的List類,你只需要實現get和size(以及一個可修改列表的set-method)。 List的API公開的其他方法在基類中定義,如果需要的話調用其他三個方法。
對於初學者,我會盡可能地開始限制訪問。從private
開始。如果你碰巧需要從別的地方的構造函數,方法或字段,但不能訪問它由於限制,那麼下一步將是要問自己:
- 如果它是一個方法,你真的需要訪問它?它會改變類/實例的行爲嗎?你不應該讓那個班做這項工作嗎?當前課程(需要該領域或方法)是否不應該爲該課程提供更緊張的體系?
- 如果它是一個領域,你需要獲得或設置它的價值?你不應該添加一個方法嗎?
點1避免了錯誤的耦合,點2改善了封裝。一旦你考慮了上述內容並得出結論,確實需要更少的限制,那麼將其設置爲更進一步打開。
- 1. <X>在java方法聲明中的含義是什麼?
- 2. 在java中sequence的含義是什麼?
- 3. @Trivial在Java中的含義是什麼?
- 4. Java中以下方法調用語句的含義是什麼?
- 5. Application.Exit方法的含義是什麼?
- 6. 什麼是「本」在Java中的含義是什麼?
- 7. java中屬性的含義是什麼?
- 8. Java中「equals」的含義是什麼?
- 9. Java中char(0)的含義是什麼?
- 10. java中%%的含義是什麼?
- 11. Java中this()的含義是什麼
- 12. java中SomeObject.class的含義是什麼?
- 13. __在這方面的含義是什麼?
- 14. 'o'在實例方法參數中的含義是什麼?
- 15. [0..1]在Module.constants()方法中的含義是什麼?
- 16. 在PHP中,文字與方法/函數的含義是什麼?
- 17. <?>在Android方法簽名中的含義是什麼?
- 18. 什麼「 - >」在Java中的含義
- 19. Java中的方法名稱之前的下劃線的含義是什麼?
- 20. Java中此語法形式<?>的含義是什麼?
- 21. 這種方便的含義是什麼?
- 22. jQuery中$ .when.apply(null,一種方法)的含義是什麼?
- 23. RESTful Web服務中PUT方法冪等的含義是什麼?
- 24. 擴展方法中「T」(TArg0,TEnum,TInt)的含義是什麼?
- 25. Python中@withparser方法的含義是什麼?
- 26. 方法聲明中三個點的含義是什麼?
- 27. opencv中以下方法的含義是什麼?
- 28. const在函數/方法簽名後的含義是什麼?
- 29. **在Java中有什麼含義?
- 30. BackoffMultiplier在DefaultRetryPolicy中的含義是什麼?
孫教程:http://java.sun.com/docs/books/tutorial/ java/javaOO/accesscontrol.html – BalusC 2010-04-15 16:50:35
我接下來是教程或基本的OOP教程。在數據封裝/訪問方面,所有OO語言的概念都是相同的。 – 2010-04-15 16:52:25
OOP代表什麼? – David 2010-04-15 16:55:25