1.解析
Java有四種訪問權限, 其中三種有訪問權限修飾符,分別為private,public和protected,還有一種不帶任何修飾符。
private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
default:即不加任何訪問修飾符,通常稱為“默認訪問模式“。該模式下,只允許在同一個包中進行訪問。
protect: 介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
下面用表格的形式來展示四種訪問權限之間的異同點,這樣會更加形象。表格如下所示:
同一個類
同一個包
不同包的子類
不同包的非子類
Private
√
Default
√
√
Protected
√
√
√
Public
√
√
√
√
2.Protected
假設在包accesscontrol下面有AccessControlDemo和?Base?兩個類,其中protected double price;是Base類的成員變量,因為兩個類在同一個包中,所以在AccessControlDemo類中可以直接訪問System.out.println(base.price);具體實例如下:
accesscontrol.AccessControlDemo
View Code
accesscontrol.Base
View Code
但是假如我們將AccessControlDemo這個類移到test這個包中,我們會發現eclipse中提示錯誤,編譯無法通過,因為在test包中對protected類型的成員變量不可見。
假如我們在test包中創建一個Base類的子類Bulk,也就是說Bulk是Base類不同包的子類。那么在Bulk類中能夠直接訪問protected double price;這個基層自Base類的成員變量,實例如下:
test.AccessControlDemo
View Code
test.Bulk
View Code