1. 程式人生 > >JAVA中四種訪問修飾符的區別總結

JAVA中四種訪問修飾符的區別總結

在Java中有四個訪問修飾符,分別是:
1:public;
2:protected;
3:預設(default)
4:private。
這四種的訪問修飾符的訪問許可權等級從上到下依次增加。
接下來將用程式碼依次的展示這四種訪問修飾符,在—-本類(自己本身),子類,同包,不同包的這四種情況下的訪問許可權。
注:這四種訪問許可權在本類中都可以自由的被呼叫訪問。

一:public

1:驗證在子類中能否被繼承,能否在其他類中被直接使用。

//主包中的父類
package 訪問修飾符主包;
public class Person {
    public String name;
}
//主包中的子類
package 訪問修飾符主包; public class Student extends Person { } //測試類 package 訪問修飾符主包; public class TestStudent { public static void main(String[] args) { Student stu = new Student(); stu.name = "小李子";//驗證父類中的public屬性繼承過來之後是否可以(直接)使用 System.out.println(stu.name);//輸出張三,驗證成功 } }

分析:驗證得出被public修飾的屬性可以直接被子類繼承過來並且在其他類當中被直接使用。

2:驗證在不同包中的不同類中是否可以被直接引用

//在主包中的父類
package 訪問修飾符主包;
public class Person {
    public String name;
}
//在主包中的子類
package 訪問修飾符主包;
public class Student extends Person {
}
//在次包中的測試類
package 訪問修飾符次包;
import 訪問修飾符主包.Person;
public class Test2 {
    public static void
main(String[] args) { Person person = new Person(); person.name = "張三";//驗證在不同包中的不同類,public屬性是否可以被直接使用。 System.out.println(person.name);//輸出張三,驗證成功。 } }

總結分析驗證得出,被public修飾的屬性,可以被自己本身使用,可以被繼承的子類使用,也可以被跨包的類使用,public就是一個公開的訪問修飾符,他所代表的屬性是公開的面向外界的。
**

二:protected

1:驗證在包內被protected修飾的屬性,繼承之後還能否被自如的使用。

//主包的父類
package 訪問修飾符主包;
public class Person {
    protected String name;
}
//主包中的子類
package 訪問修飾符主包;
public class Student extends Person {
}
//主包中的測試類
package 訪問修飾符主包;
public class TestStudent {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name = "小李子";//驗證繼承過來的屬性====即父類中的protected屬效能否在其他類中被(直接)使用
        System.out.println(stu.name);//輸出小李子,驗證成功
    }
}

分析驗證得出,被protected修飾的屬性在包內是和public一樣的,可以隨便訪問的。

2:驗證不同包中的非子類使用被protected修飾的屬性的使用效果。

//主包的父類
package 訪問修飾符主包;
public class Person {
    protected String name;
}
//主包中的子類
package 訪問修飾符主包;
public class Student extends Person {
}
//次包中的測試類
package 訪問修飾符次包;
import 訪問修飾符主包.Person;
public class Test2 {
    public static void main(String[] args) {
        Person person = new Person();
        person.name = "張三";//**注意:在這裡name會報錯,顯示將主包中的name屬性改為public!!!!!**
        System.out.println(person.name);//無法正常編譯,
    }
}

分析:這段程式碼得出在不同包中的非子類(其他類)中是無法直接使用被protected修飾的屬性的。

3:驗證不同包中的子類使用被protected修飾的屬性的使用效果。

//主包的父類
package 訪問修飾符主包;
public class Person {
    protected String name;
}
//次包中的子類
package 訪問修飾符次包;
import 訪問修飾符主包.Person;
public class Student extends Person {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name = "小李子";//驗證繼承過來的非本包屬性====即父類中的protected屬性
        System.out.println(stu.name);//輸出小李子,驗證成功,證明可以在非本包的子類中使用。
    }
}

分析上述驗證證實,對於被protected修飾的屬性,在非本包中的子類中也是可以使用的。但是,需要注意的是:次包中的Student類繼承了主包中的name屬性之後,他雖然繼承過來了但是他本質還是屬於非本包屬性,所以是不能被非本包的非子類使用的。故在次包中設定的測試類是沒有辦法直接使用被protected修飾的屬性的。
總結分析:被protected修飾的屬性可以在本包中被自由使用,但是在非本包中只有他的子類(而且只能是子類本身)可以進行使用。非本包的非子類是不能使用的。

**

三:預設(default)

**
1:驗證本包內對預設訪問修飾符修飾的屬性使用的效果。

//主包中的父類
package 訪問修飾符主包;
public class Person {
     String name;
}
//主包中的子類
package 訪問修飾符主包;
public class Student extends Person {
}
//主包中的測試類
package 訪問修飾符主包;
public class TestStudent {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name = "小李子";//驗證繼承過來的預設修飾屬效能否在同一個包中被任意使用
        System.out.println(stu.name);//輸出小李子,驗證成功
    }
}

分析:由上述程式碼驗證得出,當屬性的訪問修飾符預設的時候,他在本包中的訪問許可權效果是同protected和public的,即是可以自由訪問使用的。

2:驗證預設訪問修飾符在非本包的類中的使用情況。

//主包中的父類
package 訪問修飾符主包;
public class Person {
     String name;
}
//次包中的子類
package 訪問修飾符次包;
import 訪問修飾符主包.Person;
public class Student extends Person {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name = "小李子";//驗證繼承過來的非本包屬性====即父類中的預設修飾屬性!!!顯示報錯。
        System.out.println(stu.name);//無法正常輸出,所以無法使用。
    }
}

總結分析:預設修飾符的屬性只能在本包中使用,他當然可以在子類中使用,但是如果這個子類跨了包,那就拜拜了,效果就和private一樣了。所以,在本包中吊炸天,出了包就歇菜。

**

四:private

**
1:驗證本包中的訪問效果

package 訪問修飾符主包;
public class Person {
    private String name;
    public static void main(String[] args) {
        Person person = new Person();
        person.name = "張三";//驗證在本類中的訪問效果
        System.out.println(person.name);//輸出張三
    }
}

總結分析:private屬性和public屬性其實是兩個極端,都比較好記,private屬性只能在本類中進行使用,在其他地方根本沒有辦法進行直接訪問。

五:總結

幾個節點。第一:本類;第二:子類;第三:本包
1,public:公開的,就屬他最能,沒有他夠不到的地方。
2,protected:受保護的,在自己包裡面跟public一樣能,出了本包之後,只能由他兒子去橫。而且只能是他兒子自己橫,還不能找代言人。
3,預設(default):每個世界都有每個世界的規則,修飾符世界中規定的新生兒的活動範圍是在本包中。他可以在本類中,也可以在子類中。但是出包,歇菜—。
4,private(私有的):這簡直就是一個被囚禁的罪犯,你就是想和他有點交流,想給他送點東西(set),或者是聽他說說飯菜是否可口(get)都得通過特定的介面去訪問特定的資訊(屬性)。

完結:這個世界我來了,我希望瞭解這個世界的規則,去看一看這個世界到底有多麼的繽紛,是否像她,說的那樣—-美好。。。。。