Java基礎:訪問修飾符

所謂訪問權限,指的是本類的成員變量、成員方法和內部類對其他類的可見性。

Java一共有四種訪問權限,按照權限由大到小分別爲public、protected、default和private,如果省略了訪問修飾符,那訪問權限就是defualt。

權限控制表

權限 類內 同包 不同包子類 不同包非子類
private × × ×
default × ×
protected ×
public
  • private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之爲“私有的”。被其修飾的屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
  • default:即不加任何訪問修飾符,通常稱爲“默認訪問權限“或者“包訪問權限”。該模式下,只允許在同一個包中進行訪問。
  • protected: 介於public 和 private 之間的一種訪問修飾符,一般稱之爲“保護訪問權限”。被其修飾的屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
  • public: Java語言中訪問限制最寬的修飾符,一般稱之爲“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包訪問。

    private:

  1. 在當前類開發中,main方法之外可以直接藉助名字使用,當前類的main方法中可以使用對象打點的方式直接使用成員。
  2. 在當前類之外,使用對象(或是類名,針對靜態的)打點調用都是被限制的。這時候有同學問,那我開發的這個私有的成員難道不能使用了嗎?不是,可以通過在當前類中開發一個公有的方法,在公有方法中可以使用這個私有的成員,從而達到間接使用私有成員。
  3. 在繼承中,私有成員禁止被繼承,也就是說在子類的開發中,拒絕直接使用私有成員的名字進行使用。

    public:

  1. 在當前類開發中,main方法之外可以直接藉助名字使用,當前類的main方法中可以使用對象打點的方式直接使用成員。
  2. 在當前類之外,使用對象(或是類名,針對靜態的)打點調用是被允許的。
  3. 在子類中,公有成員允許被繼承,也就是說在子類的開發中,可以直接使用公有成員的名字進行使用。

    protected:

    protected這個修飾符比較繁瑣,它涉及到是否是同一個包的問題。

   同一個包的情況:

  1. 在當前類開發中,main方法之外可以直接藉助名字使用,當前類的main方法中可以使用對象打點的方式直接使用成員。
  2. 在當前類之外,同一個包中,使用對象(或是類名,針對靜態的)打點調用是被允許的。
  3. 在子類中,同一個包中,受保護成員允許被繼承,也就是說在子類的開發中,可以直接使用受保護成員的名字進行使用。子類的main方法中可以使用子類或是父類對象打點調用。
  4. 在當前類之外,子類之外,要使用子類的類中,同一個包中,可以使用子類或是父類對象打點調用。

   不同包的情況:

  1. 在當前類之外,不同包中,使用對象(或是類名,針對靜態的)打點調用是被禁止的。
  2. 在子類中,不同包中,受保護成員允許被繼承,也就是說在子類的開發中,可以直接使用受保護成員的名字進行使用。子類的main方法中只能通過子類對象打點調用。父類對象不行,這個時候相當於父類中的受保護成員跨包了
  3. 在當前類之外,子類之外,要使用子類的類中,與子類同一個包中,通過子類對象打點是調用不出父類中的受保護的成員的。父類對象更不行,這個時候相當於父類中的受保護成員跨包了。如果想要通過子類對象調用父類的受保護的成員,需要重新覆寫父類的這個成員。
  4. 在當前類之外,子類之外,要使用子類的類中,與父類同一個包中,通過子類對象打點是可以調用父類中的受保護的成員的。父類對象也行,同個包中。
  5. 在與父類和子類都不同包的第三個包中,要想通過子類對象調用父類的受保護成員,可以通過覆寫父類受保護成員,並將訪問限制符修改成public。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章