如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2005年12月11日

[觀念筆記]Java 存取修飾子 protected 與 default的差別

作者 : Fred Wang 日期 :2005/12/11  修訂日期 : 2013/5/26

private methods 只能在同一個class存取
default methods(不加修飾子) 同個package內的class 都可以存取or繼承

下面範例顯示五種變數存取權,i1是private, i2是default, i3是protected, i4是public, i5是method中的local變數,同一個package中class Base中的i1無法被子class j0302中的method讀取,default, protected與public都可以
























protected 具有 default 的權限, 不同之處在於, 如果"subclass"(如上例中的j0302)與主class(如上例中的Base)在不同的package中, default 就無法讓subclass存取了,  protected與public才可以

假設甲寫好一個Base class, 放在 com.free.util 的package裡面,在此 class 中的變數與methods 有 default 與 protected 兩種

現在乙另一個名為com.free.app1的package中寫一個 class j0302 要繼承(extend)甲寫好的 Base class, 在此 subclass 中, 僅能去存取Base class中 protected形態的methods與變數, 對於 default形態的methods 與變數是無法使用的 !

所以結論是 : 當您撰寫一個 class, 希望有一些 methods與變數不要給所有人用(public才是給所有class都可以用), 僅給會繼承(extend) 此類別的 subclass 使用 (此 subclass 可能位於相同或不同的package中) 請將這些 methods 與變數設成 protected

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)