熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

總結篇:將內部類進行到底

2022-06-13   來源: Java核心技術 

  總結了一下內部類的一下特性和容易出錯的地方給大家看看~~
  有什麼錯誤望指正~~~
  
  (一)
  Java以後版本添加了嵌套類(Inner Class嵌套類內部類)嵌套類定義在類(外部類)裡面
  嵌套類可以體現邏輯上的從屬關系同時對於其他類可以控制內部類不可見等
  外部類的成員變量作用域是整個外部類包括嵌套類但外部類不能訪問嵌套類的private成員例子
  public class Outer {
   private int size;
   public class Inner{
   private int counter = ;
   public void doStuff(){ size++; }
   }
   public static void main(String args[]){
   Inner inner= new Inner();
   innerdoStuff();
   Systemoutprintln(size);
   Systemoutprintln(unter);
   Systemoutprintln(counter); //編譯錯
   }
  }
  
  (二)下面演示了如何在外部類之外實例出一個public Inner類對象
  
  類名前加上外部類類名new語句前加上外部類的引用變量這很類似package的使用
  例子
  public class Outer {
   private int size;
   public class Inner{
   public void doStuff(){ size++; }
   }
  }
  
  public class TestInner{
   public static void main(String args[]){
   Outer outer = new Outer();
   OuterInner inner = outernew Inner();
   innerdoStuff();
   }
  }
  (三)當內部類與外部類有同名變量時缺省指本類中的變量
  例子public class Outer {
   private int size;
   public class Inner{
   private size;
   public void doStuff(int size){
   size++; thissize++;
   Outerthissize++; // 錯誤Outersize++因為size不是靜態變量
   }
   }
   public static void main(String args[]){
   thissize++; //錯誤靜態方法使用非靜態變量this
   }
  }
  (四)在方法中定義一個嵌套類注意嵌套類不可以訪問方法的局部變量
  因為方法的局部變量只存在與方法作用期間故localvalue不可訪問而final變量的生命周期超出了方法所以fianlvalue可用
  public class Outer {
   private int size =;
   public Object makeTheInner(int localvalue){
   final int finalvalue = ;
   class Inner{
   public String toString(){return (Inner is+size+localvalue+finalvalue);}
   }
   return new Inner();
   }
  
   public static void main(String args[]){
   Outer outer = new Outer();
   Object obj = outermakeTheInner();
   Systemoutprintln(The object is + obj);
   }
  }
  (五)
   嵌套類的類名必須與包裝它的外部類區別且嵌套類的類名僅僅可以作用於定義范圍中方法中定義類其類名名就只能出現在方法中
   定義在方法中的嵌套類只能使用定義為final的局部變量不可以使用方法中的非靜態變量
  嵌套類可以使用的變量種類包括類變量實例變量final局部變量
  嵌套類同樣具有所有的訪問控制權限高級類屬性
  嵌套類可以是abstract類
  嵌套類可以是接口被其它嵌套類實現
  定義為static的內部類將成為頂級類(toplevel)它們不依賴於外部類的對象而生成所以不可以訪問外部類的對象成員
  非static內部類不能定義static成員
  當外部類編譯時內部類也會編譯生成的類文件格式為:
  OuterClass$InnerClass如Outer$Innerclass
  
  例子
  class Outer {
   private int size =;
   static class Inner{
   int value=;
   public void doStuff(){ size+=value; }// 錯誤不能訪問非static 外部類程序
   }
  }
  
  public class TestInner{
   public static void main(String args[]){
   Outer outer = new Outer();
   Inner inner = new Inner();// 這種實例也不對
  應該 OutInner innner=new OuterInner() ;
   }
  }
  
  在總結的第(五)裡面
  非static內部類不能定義static成員
  ()定義 static 的 內部類 如果成員變量也定義成 static 那麼外圍類可以直接通過類名來訪問
  ()定義 static 的 內部類 如果成員變量不是 static 那麼外圍類需要生成內部類的對象才能訪問否則直接訪問導致編譯出錯!!
  
  

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26203.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.