程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 整頓java念書筆記十五之java中的外部類

整頓java念書筆記十五之java中的外部類

編輯:關於JAVA

整頓java念書筆記十五之java中的外部類。本站提示廣大學習愛好者:(整頓java念書筆記十五之java中的外部類)文章只能為提供參考,不一定能成為您想要的結果。以下是整頓java念書筆記十五之java中的外部類正文


外部類是指在一個內部類的外部再界說一個類。類名不須要和文件夾雷同。
*外部類可所以靜態static的,也可用public,default,protected和private潤飾。(而內部頂級類即類名和文件名雷同的只能應用public和default)。

媒介

 Java從JDK1.1的時刻,就開端引入外部類的概念了,那末小編也經由過程這篇博客來分享一下Java中有關外部類的一些特征。

 甚麼是外部類?

 在許多情形下,類被界說成一個自力的法式單位,然則有時刻也會把一個類放在另外一個類的外部界說,這個界說在其他類外部的類就稱為外部類。

從語法下去看的話,界說外部類和界說內部類的語法年夜致雷同,外部類除須要界說在其他類外面以外,還存在以下兩點差別。

 1.外部類比內部類多應用三個潤飾符:private——protected、static——內部類弗成以應用這三個潤飾符。

 2.非靜態外部類不克不及具有靜態成員。

 除以上兩點以外,其他的處所都與通俗的類雷同,上面來羅列一下罕見的外部類操作。

  非靜態外部類

  界說外部類也異常簡略,只需把一個類放在另外一個類外部界說便可,乃至都可以放置在辦法的外部。

<span >package com.test; 
public class Cow 
{ 
  private double weight; 
  // 內部類的兩個重載的結構器 
  public Cow(){} 
  public Cow(double weight) 
  { 
    this.weight = weight; 
  } 
  // 界說一個非靜態外部類 
  private class CowLeg 
  { 
    // 非靜態外部類的兩個實例變量 
    private double length; 
    private String color; 
    // 非靜態外部類的兩個重載的結構器 
    public CowLeg(){} 
    public CowLeg(double length , String color) 
    { 
      this.length = length; 
      this.color = color; 
    } 
    // 上面省略length、color的setter和getter辦法 
    public void setLength(double length) 
    { 
      this.length = length; 
    } 
    public double getLength() 
    { 
      return this.length; 
    } 
    public void setColor(String color) 
    { 
      this.color = color; 
    } 
    public String getColor() 
    { 
      return this.color; 
    } 
    // 非靜態外部類的實例辦法 
    public void info() 
    { 
      System.out.println("以後牛腿色彩是:" 
        + color + ", 高:" + length); 
      // 直接拜訪內部類的private潤飾的成員變量 
      System.out.println("本牛腿地點奶牛重:" + weight);  //① 
    } 
  } 
  public void test() 
  { 
    CowLeg cl = new CowLeg(1.12 , "诟谇相間"); 
    cl.info(); 
  } 
  public static void main(String[] args) 
  { 
    Cow cow = new Cow(378.9); 
    cow.test(); 
  } 
} 
</span> 

 在上述中非靜態外部類的成員可以拜訪內部類的private成員,但反過去就不成立了。非靜態外部類的成員只在非靜態外部類規模內是可知的,其實不能被內部類直接應用。假如內部類須要拜訪非靜態外部類的成員,則必需顯式創立非靜態外部類對象來挪用拜訪其實例成員。

<span >package com.test; 
public class Outer 
{ 
  private int outProp = 9; 
  class Inner 
  { 
    private int inProp = 5; 
    public void acessOuterProp() 
    { 
      // 非靜態外部類可以直接拜訪內部類的private成員變量 
      System.out.println("內部類的outProp值:" 
        + outProp); 
    } 
  } 
  public void accessInnerProp() 
  { 
    // 內部類不克不及直接拜訪非靜態外部類的實例變量, 
    // 上面代碼湧現編譯毛病 
    // System.out.println("外部類的inProp值:" + inProp); 
    // 如需拜訪外部類的實例變量,必需顯式創立外部類對象 
    System.out.println("外部類的inProp值:" 
      + new Inner().inProp); 
  } 
  public static void main(String[] args) 
  { 
    // 履行上面代碼,只創立了內部類對象,還未創立外部類對象 
    Outer out = new Outer();   //① 
    out.accessInnerProp(); 
  } 
} 
</span> 

 留意:非靜態外部類中不克不及有靜態辦法、靜態成員變量、靜態初始化塊。

 靜態外部類

 假如應用static來潤飾一個外部類,則這個外部類就屬於內部類自己,而不屬於內部類的某個對象,是以應用static潤飾的外部類被稱為類外部類,有的處所也稱為靜態外部類。靜態外部類可以包括靜態成員,也能夠包括非靜態成員。依據靜態成員不克不及拜訪非靜態成員的規矩,靜態外部類不克不及拜訪內部類的實例成員,只能拜訪內部類的類成員。

<span >package com.test; 
public class StaticInnerClassTest 
{ 
  private int prop1 = 5; 
  private static int prop2 = 9; 
  static class StaticInnerClass 
  { 
    // 靜態外部類裡可以包括靜態成員 
    private static int age; 
    public void accessOuterProp() 
    { 
      // 上面代碼湧現毛病: 
      // 靜態外部類沒法拜訪內部類的實例變量 
      System.out.println(prop1); 
      // 上面代碼正常 
      System.out.println(prop2); 
    } 
  } 
} 
</span> 

 匿名外部類

 應用匿名外部類可以創立那種只須要一次應用的類,而且創立匿名外部類時會立刻創立一個該類的實例,然則也須要留意一下規矩

 1.匿名外部類不克不及是籠統類,由於體系在創立匿名外部類時,會立刻創立匿名外部類的對象,是以不許可將匿名外部類界說成為籠統類

 2.匿名外部類不克不及界說結構器,因為匿名外部類沒有類名,所以沒法界說結構器 

<span >package com.test; 
interface Product 
{ 
  public double getPrice(); 
  public String getName(); 
} 
public class AnonymousTest 
{ 
  public void test(Product p) 
  { 
    System.out.println("購置了一個" + p.getName() 
      + ",花失落了" + p.getPrice()); 
  } 
  public static void main(String[] args) 
  { 
    AnonymousTest ta = new AnonymousTest(); 
    // 挪用test()辦法時,須要傳入一個Product參數, 
    // 此處傳入其匿名完成類的實例 
    ta.test(new Product() 
    { 
      public double getPrice() 
      { 
        return 567.8; 
      } 
      public String getName() 
      { 
        return "AGP顯卡"; 
      } 
    }); 
  } 
} 
</span>

上面給年夜家總結以下外部類的個性編纂

(1)、外部類依然是一個自力的類,在編譯以後外部類會被編譯成自力的.class文件,然則後面冠之外部類的類名和$符號 。
(2)、外部類不克不及用通俗的方法拜訪。外部類是內部類的一個成員,是以外部類可以自在地拜訪內部類的成員變量,不管能否是private的 。
(3)、外部類聲明成靜態的,就不克不及隨意的拜訪內部類的成員變量了,此時外部類只能拜訪內部類的靜態成員變量 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved