java訪問權(quán)限修飾符public protected friendly private用法總結(jié) 首先聲明:java中,friendly這個(gè)修飾符并沒有顯式的聲明,在成員變量和方法前什么修飾符也不用,默認(rèn)的就是friendly。 為了條理清晰,分三種不同情況來總結(jié)。 一 訪問權(quán)限修飾符修飾成員變量和方法 public:表明該成員變量和方法是共有的,能在任何情況下被訪問。 protected:必須在同一包中才能被訪問。(說的比較簡單,看個(gè)例子就明白了) eg:class A { protected int weight ; protected int f( int a,int b ) { // 方法體 } } 假設(shè)B與A在同一個(gè)包中,則 class B { void g() { A a=new A(); A.weight=100;//合法 A.f(3,4); //合法 } } 特別說明:什么是在同一個(gè)包中? 答:用package打包在一起的class ,叫在同一個(gè)包中。(不明白,舉個(gè)例子) eg:在JDK的src\java\io中,你會(huì)看到許多java類,第一句源代碼都是package java.io; 沒有使用package打包的,在同一目錄下的類也會(huì)被視做同一個(gè)包。 friendly:在這種情況下中,同protected。區(qū)別在第二和第三種情況中。 eg: class A { int weight ; int f( int a,int b ) { // 方法體 } } 假設(shè)B與A在同一個(gè)包中,則 class B { void g() { A a=new A(); A.weight=100;//合法 A.f(3,4); //合法 } } private: 只能在本類中訪問。 eg: class Test { private int money; Test() { money=2000; } private int getMoney() { return money; } public static void main(String args[]) { Test te=new Test(); te.money=3000; //合法 int m=te.getMoney(); //合法 System.out.println("money="+m); } } PS: 實(shí)際上,把重要的數(shù)據(jù)修飾為private,然后寫一個(gè)public的函數(shù)訪問它,正好體現(xiàn)了OOP的封裝特性,是OOP安全性的體現(xiàn)。 二 訪問權(quán)限修飾符修飾類 1,不能用protected和private修飾類。 2,用friendly修飾的類叫友好類,在另外一個(gè)類中使用友好類創(chuàng)建對象時(shí),要保證它們在同一包中。 三 訪問權(quán)限修飾符與繼承 這里的訪問修飾符指的是修飾成員變量和方法。可以分為兩種情況: 1,子類與父類在同一包中 此時(shí)只有聲明為private的變量與方法不能被繼承(訪問)。 eg: class Father { private int money ; int weight=100; } class Son extends Father { viod f() { money=10000;// 非法 weight=100; // 合法 } } 2,子類與父類不在同一包中 此時(shí)private與friendly均不能被繼承(訪問), protected與public可以。 eg: Father.java package com.aaa public class Father { int height ; protected int money=120; public int weight; protected int getMoney() { return money; } void setMoney(int newMoney) { money=newMoney; } } Son.java package com.bbb import com.aaa.Father; public class Son extends Father { void f() { money=10000;//合法 //height=170;//非法,height為friendly修飾的變量 System.out.println(money);//輸出結(jié)果是10000 //setMoney(300); //非法 int number=getMoney(); //合法 System.out.println(number);//輸出結(jié)果是10000 } public static void main(String args[]) { Son sss=new Son(); sss.f(); } } 所以,訪問權(quán)限修飾符權(quán)限從高到低排列是public ,protected ,friendly, private。 |
|