我們在代碼中做演示
創建Person類,以Person類為主線,驗證它的成員函數和成員變量在不同類、包、子類情況下的訪問權限
我們先為Person類創建private修飾的成員變量,測試在同一個類中是否可以使用
package example; public class Person { private String name; public static void main(String[] args) { Person person = new Person(); person.name = "艾邊成"; } }
編譯器未報錯,表示說private修飾的成員變量可以在同一個類中被調用
編譯器報錯,表示說private修飾的成員變量不能在同一個包中使用
這樣看來,修飾符 private 的作用是很強的,只用在自己的類中才能被訪問,超過了這個類,誰都不行
default 是默認修飾符,即成員函數或成員變量前沒有修飾符時,默認訪問權限為 default
package example; public class Person { String gender; //性別 無修飾符,默認為 default(默認) public static void main(String[] args) { Person person = new Person(); person.gender = "男"; } }
當在同一個包下嘗試調用時
package example; public class TestPerson { public static void main(String[] args) { Person person = new Person(); person.gender = "女"; } }
編譯器未報錯,可正常調用
編譯器顯示正常,但是值得注意的是,此時子類和我們的Person類在同一個包下,可歸為上一種情況
當然此處的“子類”一定指和父類不在同一個包,我們用 import 導入所在的包中需要的類
三、protected
同樣的方法,我們選擇不同的位置逐個去測試
package example; public class Person { protected int age; public static void main(String[] args) { Person person = new Person(); person.age = 18; } }
同一個類中沒有問題
package example; public class TestPerson { public static void main(String[] args) { Person person = new Person(); person.age = 18; } }
同一個包中沒有問題
編譯器報錯,這不符合我們的預期:在子類中是可以訪問到protected的
老師告訴我們(后續我們會做出解釋):不同包下的對象,不能直接通過父類對象去訪問
package other; import example.Person; public class Student extends Person{ public static void main(String[] args) { Person person = new Person(); Student student = new Student(); student.age = 18; } }
顯示正常,用protected修飾的屬性,子類可以繼承過來,不在父類同一個包下也是可以繼承訪問到的
package example; public class Student extends Person{ public static void main(String[] args) { Person person = new Person(); person.age = 18; Student student = new Student(); student.age = 18; } }
四、public
任何地方都可以訪問到
Java面向對象之包和內部類_基礎課程_華為雲學院_雲計算培訓-華為雲 (huaweicloud.com)