將在不斷變化的代碼嗎?如果是的話舉一些例子公共訪問修飾符限制的靈活性..在公衆訪問修飾符限制的靈活性,更改代碼?如果是的話舉一些例子
回答
如果可以訪問源代碼修飾符不能限制你的靈活性,因爲你可以改變修飾符。
如果您無法訪問源代碼,則無法擴展或覆蓋任何標記爲final的類或方法,但如果您的類不在原始包或受保護範圍內,則無法訪問任何標記爲private或默認(不含修飾符)的方法如果你的類是原產地封裝外部,而不是從谷歌上搜索你的問題幾乎擴展了原班
當然,如果您必須與代碼的早期版本編譯的代碼保持兼容,它會限制您的靈活性。那麼你不能輕易改變修飾符。 – 2009-10-28 11:27:31
嗯,我在考慮修改修飾符(私人保護例如)......但是的確如果你已經用一個私有方法擴展一個類並且你在一個擴展類中實現了一個名字相同的方法......如果您將私人修改器更改爲受保護,則可能是不希望出現的結果。但是這太不值錢了......我希望 – Telcontar 2009-10-28 12:07:42
@Telcontar - 問題是關於「公共」訪問的具體問題,而不是一般的修飾符。 – 2009-10-29 06:07:22
前兩個答案說這一切
java.sun.com/docs/books/tutorial/java/ javaOO/accesscontrol.html
www.java-samples.com/showtutorial.php?tutorialid=655
現在我的觀點:我認爲值得補充的是,默認情況下以私有方式開始並且如果該類被擴展時升級到受保護是一種好的做法;當你想授予對不同軟件包中類的訪問權限時公開。
但是,沒有任何東西阻止您向所有成員公開聲明。這完全相反,並增加了您的靈活性;警告說你犧牲了安全性。例如,如果第三方將自己的類與您的類一起加載到相同的類路徑中,並且類中的所有成員都是公共的,則它們可以輕鬆修改類的狀態。許多其他的例子。
因此,除非您完全不關心安全性,否則會在需要時升級修飾符。
@bguiz - 通常,Java訪問修飾符對安全性沒有影響,因爲反射允許您忽略它們;例如讀取任何類的私有屬性。訪問修飾符提供任何安全性的唯一情況是在禁用相關反射方法的沙箱中。 – 2009-10-29 06:13:59
是的,絕對公開訪問修飾符限制了在OOP中使用封套功能更改代碼的靈活性。讓我試着用一個例子來解釋。如您所知,公共訪問修飾符的範圍可以從任何類訪問,而不管它們屬於哪個包。這導致設計不良面向對象。
package com.app.access;
public class Car{
public int wheels;
public int lights;
// Method for how wheels rotate
// Method for how lights on
}
public class TestCar{
public static void main(String [] args) {
Car c = new Car();
c.wheels = -5; // Legal but bad 00 because we know it cannot have a negative value
}
}
上面的例子是壞的面向對象設計應當由製作好的做法通過Java bean的兼容存取方法,採取的形式提供私人或受保護的訪問修飾符實例變量和訪問來避免
get<propertyName> or for booleans is<propertyName> and set<propertyName>
提供了在返回或修改值之前檢查和/或驗證的地方。
希望這有助於!
儘管其不好的做法,'公共'的使用並不是限制靈活性的地方。限制靈活性的東西>>這裏<<這個例子不使用getters和setter! – 2009-10-29 06:01:17
爲了說明我的意思,請考慮'''''聲明爲'protected'的同一個例子。同樣的問題...一旦其他類已經被編碼爲「Car」API,則無法插入驗證碼等。 – 2009-10-29 06:05:11
@Stephen我在解釋它是如何限制守則的靈活性的,我只是試圖解釋它如何用這個例子來限制守則的靈活性。由於這是一個家庭作品,我認爲通過提供限制靈活性的例子會給他提供線索寫好功課的作業:) – 2009-10-29 06:14:50
毫無疑問,當您的面向對象設計規定它應該有更多的受限訪問時,宣佈某個類或成員公開是一個壞主意。
但這會限制您的靈活性嗎?我會說是的。
由於這是作業,我不打算爲你解答答案......或給你可以剪切和粘貼的例子。但考慮Java的規則來覆蓋子類中的成員。具體來說,考慮在改變方法的訪問方面你可以做什麼,不能做什麼。
- 1. 如何限制引用庫中的公共訪問修飾符?
- 2. .NET類訪問修飾符(朋友和公衆)
- 3. Xamarin.Android - 不能更改訪問修飾符時凌駕性公衆繼承成員Android.Support.V4.App.Fragment
- 4. 修改公共屬性的訪問修飾符是一個突破性變化嗎?
- 5. C#訪問修飾符:限制一些方法只有一個其他類
- 6. 公共和私人訪問修飾符
- 7. 屬性的不同訪問修飾符?
- 8. 是否有訪問修飾符限制解決方案?
- 9. Java的默認訪問修飾符曾經是公開的
- 10. 如何ReSharper的(R#)更改默認訪問修飾符內部
- 11. 如何更改用戶控件的訪問修飾符
- 12. Typescript中公共類訪問修飾符的用途是什麼?
- 13. 訪問修飾符錯誤 - 儘管類是公開的
- 14. 訪問修飾符 - 目的是什麼?
- 15. 爲什麼Java限制隱藏方法的訪問修飾符
- 16. 如何限制對靜態公衆成員的訪問?
- 17. 授予一個超級靈活的用戶訪問/修改權限系統
- 18. 更改GridView的CreateRow方法的訪問修飾符
- 19. 訪問修飾符VS屬性
- 20. 是私人和公共訪問修飾符在性能上有所不同嗎?
- 21. C++子類訪問修飾符?
- 22. 使用修飾符實例化ActionEvent(如果有的話)
- 23. 更改訪問修飾符的解決方法
- 24. 更改ASP.NET控件的訪問修飾符
- 25. 更改現有資源的「訪問修飾符」
- 26. 更改設計器文件中的訪問修飾符
- 27. 更改Resharper生成的自動屬性中的訪問修飾符
- 28. 更改訪問修飾符在運行時
- 29. 是否可以在ActionScript 3中更改繼承的訪問修飾符?
- 30. 如何使用ReSharper一次更改多個方法的訪問修飾符?
我喜歡早晨別人作業的氣味.... – skaffman 2009-10-28 10:35:56
如果沒有別的,至少你可以像從維基百科粘貼和複製一些文本一樣動機... – 2009-10-28 10:40:45
@skaffman,相應地重新標記。 – 2009-10-28 13:30:01