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

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

一個初學者初識 Java 內部類

2019-11-18 10:42:14
字體:
來源:轉載
供稿:網友

  提起java內部類(Inner Class)可能很多人不太熟悉,實際上類似的概念在C++里也有,那就是嵌套類(Nested Class),關于這兩者的區別與聯系,在下文中會有對比。內部類從表面上看,就是在類中又定義了一個類(下文會看到,內部類可以在很多地方定義),而實際上并沒有那么簡單,乍看上去內部類似乎有些多余,它的用處對于初學者來說可能并不是那么顯著,但是隨著對它的深入了解,你會發現Java的設計者在內部類身上的確是專心良苦。學會使用內部類,是把握Java高級編程的一部分,它可以讓你更優雅地設計你的程序結構。下面從以下幾個方面來介紹:
  
  第一次見面
  public interface Contents {
  int value();
  }
  
  public interface Destination {
  String readLabel();
  }
  
  public class Goods {
  PRivate class Content implements Contents {
  private int i = 11;
  public int value() {
  return i;
  }
  }
  
  protected class GDestination implements Destination {
  private String label;
  private GDestination(String whereTo) {
  label = whereTo;
  }
  public String readLabel() {
  return label;
  }
  }
  
  public Destination dest(String s) {
  return new GDestination(s);
  }
  public Contents cont() {
  return new Content();
  }
  }
  
  class TestGoods {
  public static void main(String[] args) {
  Goods p = new Goods();
  Contents c = p.cont();
  Destination d = p.dest("Beijing");
  }
  }
  
  在這個例子里類Content和GDestination被定義在了類Goods內部,并且分別有著protected和private修飾符來控制訪問級別。Content代表著Goods的內容,而GDestination代表著Goods的目的地。它們分別實現了兩個接口Content和Destination。在后面的main方法里,直接用 Contents c和Destination d進行操作,你甚至連這兩個內部類的名字都沒有看見!這樣,內部類的第一個好處就體現出來了——隱藏你不想讓別人知道的操作,也即封裝性。
  同時,我們也發現了在外部類作用范圍之外得到內部類對象的第一個方法,那就是利用其外部類的方法創建并返回。上例中的cont()和dest()方法就是這么做的。那么還有沒有別的方法呢?當然有,其語法格式如下:
  
  outerObject=new outerClass(ConstrUCtor Parameters);
  
  outerClass.innerClass inNerobject=outerObject.new InnerClass(Constructor Parameters);
  
  注重在創建非靜態內部類對象時,一定要先創建起相應的外部類對象。至于原因,也就引出了我們下一個話題——
  
  非靜態內部類對象有著指向其外部類對象的引用
  對剛才的例子稍作修改:
  
  public class Goods {
  
  private valueRate=2;
  
  private class Content implements Contents {
  private int i = 11*valueRate;
  public int value() {
  return i;
  }
  }
  
  protected class GDestination implements Destination {
  private String label;
  private GDestination(String whereTo) {
  label = whereTo;
  }
  public String readLabel() {
  return label;
  }
  }
  
  public Destination dest(String s) {
  return new GDestination(s);
  }
  public Contents cont() {
  return new Content();
  }
  }
  
  修改的部分用藍色顯示了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 界首市| 高台县| 绥江县| 横峰县| 台中市| 新沂市| 漳州市| 石首市| 江油市| 沾益县| 甘泉县| 曲松县| 平武县| 塔河县| 西盟| 丁青县| 岫岩| 巴南区| 卢湾区| 喜德县| 安义县| 长寿区| 桃园市| 伊金霍洛旗| 临海市| 江孜县| 康乐县| 扎鲁特旗| 张家界市| 阿克苏市| 利津县| 绥德县| 安岳县| 玛曲县| 瓮安县| 安丘市| 冀州市| 淳化县| 通山县| 阿鲁科尔沁旗| 嘉荫县|