国产探花免费观看_亚洲丰满少妇自慰呻吟_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();
  }
  }
  
  修改的部分用藍色顯示了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁东县| 隆安县| 临西县| 康马县| 循化| 永城市| 长沙县| 闸北区| 广南县| 金秀| 普陀区| 永清县| 鄱阳县| 盐津县| 油尖旺区| 辽源市| 颍上县| 拜泉县| 乌拉特后旗| 汉川市| 深州市| 定南县| 密云县| 安陆市| 那曲县| 郯城县| 新平| 旌德县| 西盟| 遵义县| 玉田县| 南汇区| 来安县| 襄城县| 孝感市| 乌什县| 十堰市| 松江区| 句容市| 钦州市| 宁都县|