Java關鍵字(一) 修飾符private、protected、public和default的範圍

來源:互聯網
上載者:User

標籤:extend   編譯   name   script   void   情況   許可權   ble   編譯報錯   

我們經常用著四種修飾符去修飾變數、方法和類,但是這四種的範圍都一樣嗎? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具體的範圍是哪些範圍。先對其四種進行說明再通過案例進行證明:

public:具有最大存取權限。 可以被同一項目下的任何類所調用,一般用於對外的情況。

protected:與public不同的是不同包下的類是不能使用的,但是其子孫類除外。所以我認為這是特意為子類設計的。

default:它是針對本包設計的,它所修飾的在本包下的其他類都訪問。

private:只為類本身提供。是一種封裝的體現。

案例:先聲明一個類,可以供子類繼承。

package com.yuanfy.test.scope1;/** * @Description: 父類,其中有四種修飾符所修飾的變數和方法 * @author yuanfy * @date 2017年12月8日 下午5:04:35  */public class Person {    private String name;    int age;    protected String color;        public Person(){}        public Person(String name, int age, String color) {        super();        this.name = name;        this.age = age;        this.color = color;    }    public void say(){        System.out.println(this.name + " say: I am " + this.color + " Person");    }}

測試1:同包下面測試 四種範圍,從中可以看出private不支援在同包下的其他類使用,其他三種是支援在同包下其他類調用的。

package com.yuanfy.test.scope1;/** * @Description: 同包下面測試 四種範圍 * @author yuanfy * @date 2017年12月8日 下午5:11:12  */public class PersonTest {    public static void main(String[] args) {        Person person = new Person("James", 32, "red");        System.out.println("name:" + person.name);//編譯報錯,所以private修飾的 是不能在同包下的其他類訪問        System.out.println("age:" + person.age);// default        System.out.println("color:" + person.color);//protected        person.say();//public    }}

 測試2:在子孫類下測試 四種範圍(不同包的情況下,同包相當於測試1),從下面測試代碼中可以看出:private和default所修飾的,不支援在子孫類下調用的,其他兩種是支援在子孫類下調用的。

 1 package com.yuanfy.test.scope2; 2 import com.yuanfy.test.scope1.Person; 3 /** 4  * @Description: 在子孫類下測試 四種範圍 5  * @author yuanfy 6  * @date 2017年12月8日 下午5:24:30  7  */ 8 public class BlackPerson extends Person{ 9 10     public BlackPerson(String name, int age) {11         super(name, age, "black");12     }13     public static void main(String[] args) {14         BlackPerson person = new BlackPerson("James", 32);15         16         System.out.println("name:" + person.name);//private 編譯報錯,所以private修飾的 是不能在不同包下的子孫類訪問17         System.out.println("age:" + person.age);// default  編譯報錯,所以default修飾的 是不能在不同包下的子孫類訪問18         System.out.println("color:" + person.color);//protected 19         person.say();//public20     }21 }

測試3:不同包下面測試 四種範圍,從下面測試案例中可以看到只有public才支援不同包下的其他類(子孫類除外)調用,其他三種都不支援。

 1 package com.yuanfy.test.scope2; 2  3 import com.yuanfy.test.scope1.Person; 4  5 /** 6  * @Description: 不同包下面測試 四種範圍 7  * @author yuanfy 8  * @date 2017年12月8日 下午5:11:12  9  */10 public class PersonTest2 {11     public static void main(String[] args) {12         Person person = new Person("James", 32, "red");13         14         System.out.println("name:" + person.name);//private 編譯報錯,所以private修飾的 是不能在其他包下的任何類訪問(除了自身)15         System.out.println("age:" + person.age);// default 編譯報錯,所以default修飾的  是不能在其他包下訪問的。16         System.out.println("color:" + person.color);//protected 編譯報錯,所以default修飾的  是不能在其他包下訪問的。17         person.say();//public18     }19 }

所以經過上面案例分析可以得出他們分別對應有效範圍,如下表:

範圍 當前類 同一包內 子孫類(不同包) 其他包
public
protected ×
default × ×
private × × ×
 

 

Java關鍵字(一) 修飾符private、protected、public和default的範圍

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.