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

Java內部類與匿名內部類

2013-11-23 19:23:00  來源: Java核心技術 

  定義在類中方法之外的內部類分為實例內部類和靜態內部類

  實例內部類自動持有外部類的實例的引用即可以訪問外部類的所有變量

  靜態內部類可以直接訪問外部類的靜態成員

  定義在方法中的內部類叫局部內部類該類只能訪問被final修飾的局部變量和參數

  接口定義如下

  view plainprint?

  interface Super{ public void print()} view plainprint?

  //例子public class Test { int c=public Super getInstance(){ int a=final int b=class Inner implements Super{ public void print() { //局部內部類中訪問本方法的局部變量Systemoutprintln(a)//編譯錯誤 從內部類中訪問局部變量 a需要被聲明為final //內部類中訪問成員變量Systemoutprintln(b)//正常Systemoutprintln(c)//正常} return new Inner()}

  public static void main(String[] args) { Super s=new Test()getInstance()sprint()}例子對上面例子的例子改變一下從內部類>匿名內部類匿名內部類既然叫匿名那麼名字對於該類來說已經不重要因為該匿名類的實例本來就不打算給別的類使用或重復使用僅限於類內部使用或使用一次所以就不需要類名了不過因為沒有類名匿名內部類也就沒有構造函數了

  在方法裡面定義的局部內部類(不管是否匿名)它可無條件訪問外部類的成員變量但要訪問方法的局部變量或參數就要加final修飾符

  view plainprint?

  public class Test { int c=public Super getInstance(){ int a=final int b=return new Super(){ public void print() { //局部內部類中訪問本方法的局部變量Systemoutprintln(a)//編譯錯誤 從內部類中訪問局部變量 a需要被聲明為final Systemoutprintln(b)//正常Systemoutprintln(c)//正常} }} public static void main(String[] args) { Super s=new Test()getInstance()sprint()}


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