java面向?qū)ο蟮幕舅枷胫皇欠庋b細節(jié)并且公開接口。Java語言采用訪問控制修飾符來控制類及類的方法和變量的訪問權(quán)限,從而向使用者暴露接口,但隱藏實現(xiàn)細節(jié)。訪問控制分為四種級別:
(1)public: 用public修飾的類、類屬變量及方法,包內(nèi)及包外的任何類(包括子類和普通類)均可以訪問;
(2)protected: 用protected修飾的類、類屬變量及方法,包內(nèi)的任何類及包外那些繼承了該類的子類才能訪問(包外的子類可以用Super來訪問),protected重點突出繼承;
(3)default: 如果一個類、類屬變量及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問權(quán)限為default(默認訪問權(quán)限)。默認訪問權(quán)限的類、類屬變量及方法,包內(nèi)的任何類(包括繼承了此類的子類)都可以訪問它,而對于包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;
(4)private: 用private修飾的類、類屬變量及方法,只有本類可以訪問,而包內(nèi)包外的任何類均不能訪問它。
(1)適用范圍<訪問權(quán)限范圍越小,安全性越高>,如圖所示:
(2)類的修飾符:public:主類。 一個文件中只能有一個主類。 主類整個項目下都可以使用。
default:其他類。不能跨包使用。
成員(變量和方法 ,本包可以使用。成員變量成員方法):public protected default private
public:在整個項目下都可以使用。
default:在本包內(nèi)可以使用,不能跨包。
private:只有本類可以使用。其他類都不能使用。
protected:不能跨包,但是跨包類如果是該類的子類,就可以用。用super來訪問父類的成員
構(gòu)造方法:
public protected default private和成員的使用是一樣的,沒有任何區(qū)別。
例:
package com.fs.test;
import com.fs.TestAccess02;
/*為什么protected修飾的成員變量hight 可以在B類使用 A類就不行、
*
* 因為protected修飾的關(guān)鍵字,雖然不能跨包使用。但是可以在子類中使用。
*
* */
public class A {
public static void main(String[] args) {
//Test1是public修飾的類,是可以跨包使用的。
TestAccess02 t =new TestAccess02();
//default修飾的類,在其他包中不能使用。
// T t2 =new T();
//public修飾的成員變量age 是可以跨包使用的。
System.out.println(t.age);
//default修飾的成員變量name。 不可以跨包使用
// System.out.println(t.name);
//protected修飾的成員變量hight 不能跨包使用。
// System.out.println(t.hight);
}
}
class B extends TestAccess02{
public void method(){
//protected修飾的成員變量hight 可以在不同包子類中使用。
System.out.println(super.hight);
}
}
TestAccess02位于:package com.fs
A位于:package com.fs.test
B 位于:package com.fs.test,但是卻是TestAccess02的子類
結(jié)論:protected修飾符所修飾的類(這句話中指父類)屬成員變量和方法,只可以被子類訪問,而不管子類是不是和父類位于同一個包中。default修飾符所修飾的類屬成員變量和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬于子類限制修飾符,而default屬于包限制修飾符。