java存取權限修飾符

來源:互聯網
上載者:User

首先聲明:java中,friendly這個修飾符並沒有顯式的聲明,在成員變數和方法前什麼修飾符也不用,預設的就是friendly。

  為了條理清晰,分三種不同情況來總結。

 

  一 存取權限修飾符修飾成員變數和方法

 

  public:表明該成員變數和方法是共有的,能在任何情況下被訪問。

 

  protected:必須在同一包中才能被訪問。(說的比較簡單,看個例子就明白了)

 

  Java代碼

 

 

 class A 

  { 

  protected int weight ; 

  protected int f( int a,int b ) 

  { 

  // 方法體 

  } 

  }

  假設B與A在同一個包中,則

 

  Java代碼

 

 

   class B 

  { 

  void g() 

  { 

  A a=new A(); 

  A.weight=100;//合法 

  A.f(3,4); //合法 

  } 

  }

  特別說明:什麼是在同一個包中?

 

  答:用package打包在一起的class ,叫在同一個包中。(不明白,舉個例子)

 

  eg:在JDK的srcjavaio中,你會看到許多java類,第一句原始碼都是package java.io;

 

  沒有使用package打包的,在同一目錄下的類也會被視做同一個包。

 

  friendly:在這種情況下中,同protected。區別在第二和第三種情況中。

 

  Java代碼

 

 

   class A 

  { 

  int weight ; 

  int f( int a,int b ) 

  { 

  // 方法體 

  } 

  }

  假設B與A在同一個包中,則

 

  Java代碼

 

 

  class B 

  { 

  void g() 

  { 

  A a=new A(); 

  A.weight=100;//合法 

  A.f(3,4); //合法 

  } 

  }

  private: 只能在本類中訪問。

 

  Java代碼

 

 

   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: 實際上,把重要的資料修飾為private,然後寫一個public的函數訪問它,正好體現了OOP的封裝特性,是OOP安全性的體現。

 

二 存取權限修飾符修飾類

  1,不能用protected和private修飾類。

 

  2,用friendly修飾的類叫友好類,在另外一個類中使用友好類建立對象時,要保證它們在同一包中。

 

  三 存取權限修飾符與繼承

 

  這裡的存取修飾詞指的是修飾成員變數和方法。可以分為兩種情況:

 

  1,子類與父類在同一包中

 

  此時只有聲明為private的變數與方法不能被繼承(訪問)。

 

  Java代碼

 

 

   class Father 

  { 

  private int money ; 

  int weight=100; 

  } 

  class Son extends Father 

  { 

  viod f() 

  { 

  money=10000;// 非法 

  weight=100; // 合法 

  } 

  }

  2,子類與父類不在同一包中

 

  此時private與friendly均不能被繼承(訪問), protected與public可以。

 

  Father.java

 

  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

 

  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);//輸出結果是10000 

  //setMoney(300); //非法 

  int number=getMoney(); //合法 

  System.out.println(number);//輸出結果是10000 

  } 

  public static void main(String args[]) 

  { 

  Son sss=new Son(); 

  sss.f(); 

  } 

  }

  所以,存取權限修飾符許可權從高到低排列是public ,protected ,friendly, private。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.