国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java 中protected modifier 使用總結

2019-11-18 11:59:48
字體:
來源:轉載
供稿:網友

  1. PRotected 訪問控制符能被用于方法和成員變量。
  
  2. 聲明為protected的方法和成員變量能被同一個包里的所有類所訪問,就像默認修飾符package一樣。
  
  3. 能被該類的子類所訪問,子類可以和父類不在一個包中。
  
  這樣,當你想讓一個類中的某個方法或成員變量在包中都可見,而且其子類也能訪問(子類有可能和父類不在同一個包中)但又不想讓所有類都可以訪問該類時,就可以用protected修飾符。
  
  可訪問性:
  public > protected > package >private
  
  注重:
  
  4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
  
  下面的例子可以說明上述幾點:(非凡注重第4點)
  
  我們將創建一個父類Bird.java,放在birdpack包中,父類中有一個protected int的成員變量nFeathers;
  
  再分別創建4個Bird類的子類DUCk1.java,Duck2.java,Duck3.java,Swan.java,放在duckpack包中,通過在每個子類中調用nFeathers的不同方法說明上述幾點
  
  下面的程序并不用于運行,因為訪問控制在編譯期間就要確定,我們只需編譯下述文件,看是否能通過。在編譯下述文件前,先想想能不能編譯通過?
  
  //Bird.java------------------------------
  
  package birdpack;
  
  public class Bird{
  
  protected int nFeathers;
  
  }
  
  //Duck1.java-----------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck1 extends Bird{
  
  public void setn(int duck1n){
  
  //在子類中直接訪問父類中的protected變量
  
  nFeathers=duck1n;
  
  }
  
  }
  
  //Duck2.java------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck2 extends Bird{
  
  public void construct(int newduck2){
  
  Duck2 d2 = new Duck2();
  
  //在子類中通過子類的對象訪問父類中的protected變量
  
  d2.nFeathers=newduck2;
  
  }
  
  }
  
  //Duck3.java------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck3 extends Bird{
  
  public void construct(int newduck3){
  
  Bird b = new Bird();
  
  //子類中用父類對象反而不能訪問父類中的protected變量
  
  b.nFeathers=newduck3;
  
  }
  
  }
  
  //Swan.java--------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Swan extends Bird{
  
  public void construct(int swan){
  
  Duck1 d1 = new Duck1();
  
  //子類中用另外一個子類的對象也不能訪問父類中的protected變量
  
  d1.nFeathers=swan;
  
  }
  
  }
  
  編譯上述幾個文件,后2個不能通過。編譯器提示:
  
  " nFeathers has protected access in birdpack.Bird"。
  
  //Bird.java------------------------------
  
  package birdpack;
  
  public class Bird{
  
  protected int nFeathers;
  
  }
  
  //Duck1.java-----------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck1 extends Bird{
  
  public void setn(int duck1n){
  
  //在子類中直接訪問父類中的protected變量
  
  nFeathers=duck1n;
  
  }
  
  }
  
  //Duck2.java------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck2 extends Bird{
  
  public void construct(int newduck2){
  
  Duck2 d2 = new Duck2();
  
  //在子類中通過子類的對象訪問父類中的protected變量
  
  d2.nFeathers=newduck2;
  
  }
  
  }
  
  //Duck3.java------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Duck3 extends Bird{
  
  public void construct(int newduck3){
  
  Bird b = new Bird();
  
  //子類中用父類對象反而不能訪問父類中的protected變量
  
  b.nFeathers=newduck3;
  
  }
  
  }
  
  //Swan.java--------------------------------
  
  package duckpack;
  
  import birdpack.Bird;
  
  public class Swan extends Bird{
  
  public void construct(int swan){
  
  Duck1 d1 = new Duck1();
  
  //子類中用另外一個子類的對象也不能訪問父類中的protected變量
  
  d1.nFeathers=swan;
  
  }
  
  }
  
  編譯上述幾個文件,后2個不能通過。編譯器提示:
  
  " nFeathers has protected access in birdpack.Bird"。
  
  第4點說明,就算在子類中,也只能通過子類(或子類的子類)的引用來訪問父類中的protected方法和成員變量。
  
  在Duck3和Swan兩個子類中,直接通過父類和另一個子類來訪問父類中的protected方法和成員變量就不行。
  
  附:編譯技巧
  
  當編譯含有包聲明的源文件時,使用 -d 選項會帶來很多方便,它能保證編譯后的class文件存放在正確的目錄路徑下。
  
  我們可以把上述5個文件都放在protectedtest目錄下,然后用 -d 選項去編譯:
  
  javac -d . Bird.java
  
  javac -d . Duck1.java
  .....
  
  其中.表示以當前目錄創建包結構的目錄層次。編譯成功后,會在protectedtest下生成2個目錄:birdpack和duckpack,里面是生成的class文件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旅游| 荆州市| 静海县| 托克逊县| 梁平县| 云梦县| 平舆县| 罗山县| 健康| 洛扎县| 佛坪县| 红原县| 潞西市| 华容县| 济源市| 临夏市| 射洪县| 锡林郭勒盟| 浠水县| 健康| 绥芬河市| 边坝县| 潜山县| 策勒县| 安福县| 营口市| 台州市| 商南县| 宕昌县| 屏东县| 长丰县| 桃园县| 嵩明县| 灵川县| 神农架林区| 两当县| 遵义市| 丁青县| 北流市| 开平市| 青川县|