2009-10-28 16 views

回答

0

如果可以訪問源代碼修飾符不能限制你的靈活性,因爲你可以改變修飾符。

如果您無法訪問源代碼,則無法擴展或覆蓋任何標記爲final的類或方法,但如果您的類不在原始包或受保護範圍內,則無法訪問任何標記爲private或默認(不含修飾符)的方法如果你的類是原產地封裝外部,而不是從谷歌上搜索你的問題幾乎擴展了原班

+0

當然,如果您必須與代碼的早期版本編譯的代碼保持兼容,它會限制您的靈活性。那麼你不能輕易改變修飾符。 – 2009-10-28 11:27:31

+0

嗯,我在考慮修改修飾符(私人保護例如)......但是的確如果你已經用一個私有方法擴展一個類並且你在一個擴展類中實現了一個名字相同的方法......如果您將私人修改器更改爲受保護,則可能是不希望出現的結果。但是這太不值錢了......我希望 – Telcontar 2009-10-28 12:07:42

+0

@Telcontar - 問題是關於「公共」訪問的具體問題,而不是一般的修飾符。 – 2009-10-29 06:07:22

0

前兩個答案說這一切

java.sun.com/docs/books/tutorial/java/ javaOO/accesscontrol.html

www.java-samples.com/showtutorial.php?tutorialid=655

現在我的觀點:我認爲值得補充的是,默認情況下以私有方式開始並且如果該類被擴展時升級到受保護是一種好的做法;當你想授予對不同軟件包中類的訪問權限時公開。

但是,沒有任何東西阻止您向所有成員公開聲明。這完全相反,並增加了您的靈活性;警告說你犧牲了安全性。例如,如果第三方將自己的類與您的類一起加載到相同的類路徑中,並且類中的所有成員都是公共的,則它們可以輕鬆修改類的狀態。許多其他的例子。

因此,除非您完全不關心安全性,否則會在需要時升級修飾符。

+0

@bguiz - 通常,Java訪問修飾符對安全性沒有影響,因爲反射允許您忽略它們;例如讀取任何類的私有屬性。訪問修飾符提供任何安全性的唯一情況是在禁用相關反射方法的沙箱中。 – 2009-10-29 06:13:59

0

是的,絕對公開訪問修飾符限制了在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> 

提供了在返回或修改值之前檢查和/或驗證的地方。

希望這有助於!

+0

儘管其不好的做法,'公共'的使用並不是限制靈活性的地方。限制靈活性的東西>>這裏<<這個例子不使用getters和setter! – 2009-10-29 06:01:17

+0

爲了說明我的意思,請考慮'''''聲明爲'protected'的同一個例子。同樣的問題...一旦其他類已經被編碼爲「Car」API,則無法插入驗證碼等。 – 2009-10-29 06:05:11

+0

@Stephen我在解釋它是如何限制守則的靈活性的,我只是試圖解釋它如何用這個例子來限制守則的靈活性。由於這是一個家庭作品,我認爲通過提供限制靈活性的例子會給他提供線索寫好功課的作業:) – 2009-10-29 06:14:50

0

毫無疑問,當您的面向對象設計規定它應該有更多的受限訪問時,宣佈某個類或成員公開是一個壞主意。

但這會限制您的靈活性嗎?我會說是的。

由於這是作業,我不打算爲你解答答案......或給你可以剪切和粘貼的例子。但考慮Java的規則來覆蓋子類中的成員。具體來說,考慮在改變方法的訪問方面你可以做什麼,不能做什麼。

相關問題