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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

內(nèi)部類和上溯造型

2019-11-18 12:07:54
字體:
供稿:網(wǎng)友

  迄今為止,內(nèi)部類看起來仍然沒什么非凡的地方。究竟,用它實現(xiàn)隱藏顯得有些大題小做。java已經(jīng)有一個非常優(yōu)秀的隱藏機制——只答應(yīng)類成為“友好的”(只在一個包內(nèi)可見),而不是把它創(chuàng)建成一個內(nèi)部類。
  
  然而,當(dāng)我們預(yù)備上溯造型到一個基礎(chǔ)類(非凡是到一個接口)的時候,內(nèi)部類就開始發(fā)揮其要害作用(從用于實現(xiàn)的對象生成一個接口句柄具有與上溯造型至一個基礎(chǔ)類相同的效果)。這是由于內(nèi)部類隨后可完全進入不可見或不可用狀態(tài)——對任何人都將如此。所以我們可以非常方便地隱藏實施細節(jié)。我們得到的全部回報就是一個基礎(chǔ)類或者接口的句柄,而且甚至有可能不知道準(zhǔn)確的類型。就象下面這樣:
  
  //: Parcel3.java
  // Returning a handle to an inner class
  package c07.parcel3;
  
  abstract class Contents {
   abstract public int value();
  }
  
  interface Destination {
   String readLabel();
  }
  
  public class Parcel3 {
   PRivate class PContents extends Contents {
    private int i = 11;
    public int value() { return i; }
   }
   protected class PDestination
     implements Destination {
    private String label;
    private PDestination(String whereTo) {
     label = whereTo;
    }
    public String readLabel() { return label; }
   }
   public Destination dest(String s) {
    return new PDestination(s);
   }
   public Contents cont() {
    return new PContents();
   }
  }
  
  class Test {
   public static void main(String[] args) {
    Parcel3 p = new Parcel3();
    Contents c = p.cont();
    Destination d = p.dest("Tanzania");
    // Illegal -- can't access private class:
    //! Parcel3.PContents c = p.new PContents();
   }
  } ///:~
  
  現(xiàn)在,Contents和Destination代表可由客戶程序員使用的接口(記住接口會將自己的所有成員都變成public屬性)。為方便起見,它們置于單獨一個文件里,但原始的Contents和Destination在它們自己的文件中是相互public的。
  
  在Parcel3中,一些新東西已經(jīng)加入:內(nèi)部類PContents被設(shè)為private,所以除了Parcel3之外,其他任何東西都不能訪問它。PDestination被設(shè)為protected,所以除了Parcel3,Parcel3包內(nèi)的類(因為protected也為包賦予了訪問權(quán);也就是說,protected也是“友好的”),以及Parcel3的繼續(xù)者之外,其他任何東西都不能訪問PDestination。這意味著客戶程序員對這些成員的熟悉與訪問將會受到限制。事實上,我們甚至不能下溯造型到一個private內(nèi)部類(或者一個protected內(nèi)部類,除非自己本身便是一個繼續(xù)者),因為我們不能訪問名字,就象在classTest里看到的那樣。所以,利用private內(nèi)部類,類設(shè)計人員可完全禁止其他人依靠類型編碼,并可將具體的實施細節(jié)完全隱藏起來。除此以外,從客戶程序員的角度來看,一個接口的范圍沒有意義的,因為他們不能訪問不屬于公共接口類的任何額外方法。這樣一來,Java編譯器也有機會生成效率更高的代碼。
  
  普通(非內(nèi)部)類不可設(shè)為private或protected——只答應(yīng)public或者“友好的”。
  
  注重Contents不必成為一個抽象類。在這兒也可以使用一個普通類,但這種設(shè)計最典型的起點依然是一個“接口”。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洞口县| 桑植县| 天峻县| 大庆市| 靖江市| 阿拉尔市| 江口县| 家居| 曲周县| 纳雍县| 朔州市| 津南区| 苍溪县| 兰西县| 万山特区| 哈巴河县| 明溪县| 湘潭市| 巴东县| 错那县| 蒲城县| 同仁县| 永兴县| 西和县| 尚志市| 鹿泉市| 怀柔区| 桐庐县| 天台县| 尉氏县| 巩义市| 绥芬河市| 乳山市| 浦江县| 新闻| 越西县| 武安市| 黎城县| 嘉定区| 陆良县| 光山县|