java內部類解析——菜鳥摘記
//例程:靜態內部類
class StaticInner { private static int a=4; public static class Inner { public void test() { System.out.println(a); } } } public class StaticInnerClassTest { public static void main(String [] args { StaticInner.Inner inner=new StaticInner.Inner(); //注意靜態內部類的構造方法 inner.test(); } }
內部類可以被定義在另一個類中,或定義在一個方法中,甚至是一個表示式的一部分
四種內部類的解析:
第一種:靜態內部類
①編譯成一個完全與外部類相獨立的.class檔案 (OutClass.class與OutClass$StaticInnerClass.class相獨立)
②只能訪問對應的外部類中的靜態變數與靜態方法,包括private static的變數與方法。
例程見上。
第二種:成員內部類(member inner class)
①能訪問所在相應的外部類的所有成員(靜態、非靜態)
②create an instance within the enclosing class this.new InnerClass();
③構造方法:( new OuterClass() ).new InnerClass();
④在內部類中訪問外部類的變數 :OuterClass.this.member
例程:
class MemberInner
{
private int a=4;
public class Inner2
{
public void doSomething()
{
System.out.println("Hello World ");
}
}
}
public class MemberInnerClassTest
{
public static void main (String[] args)
{
MemberInner.Inner2 inner=new MemberInner(). new Inner2(); //注意其構造方法,並將其與靜態內部類的構造方法相比較,
//在這裡,先建立MemberInner類的例項,再建立內部類Inner2的例項
inner.doSomething();
}
}
第三種:區域性內部類 (不常用)
① 在一個方法內定義,或在方法內的語句塊內定義,只在相應範圍內起作用
② 像區域性變數一樣,區域性內部類不能被宣告為public \protected\private\static
③ 若在一個方法內定義,只能訪問所在方法內的區域性常量(final local variables )
例程:
class LocalInner
{
public void doSomething( )
{
class Inner3
{
public void test()
{
System.out.println(''hello world");
}
}
new Inner3().test();
}
}
public class LocalInnerClassTest
{
public static void main(String[] args)
{
LocalInner localInner=new LocalInner();
localInner.doSomething();
}
}
第四種:匿名內部類(android 中常用)(Anonymous Inner Class)
① 區域性內部類,沒有類名字
② no key word class
③ No key words extends and implements
④沒有構造方法(連類名字都沒有)
⑤隱式地繼承了一個父類或實現了一個介面
例程1:隱式繼承一個父類(該例程中有不推薦的方法,僅供參考匿名內部類思路)
import java.util.*;
public class AnonymousInnerClassTest
{
public String get(Date date)
{
return date.toLocaleString();
}
public static void main(String[] args)
{
AnonymousInnerClassTest test =new AnonymousInnerClassTest();
String str=test.get(new Date()
{
public String toLocaleString()
{
return "hello world";
}
} );
System.out.println(str);
}
}
註釋:Date是java.util的類,上例中的匿名內部類 new Data() { } 隱式地繼承了java.util.Data類,並重寫了toLocaleString()方法。
例程2:匿名內部類隱式實現一個介面
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
private Button btn1=null;
private Button btn2=null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Button btn=(Button)v;
switch (btn.getId())
{
case R.id.btn1:
Toast.makeText(MainActivity.this, "你點選了按鈕", Toast.LENGTH_LONG).show();
break;
case R.id.btn2:
System.out.println("你點選了Button2");
break;
}
}
};
}
註釋: OnClickListener 是android.view.View包中的介面——
public static interface View.OnClickListener
其中,該介面有方法:
Public Methods |
|||||||||||
abstract void onClick(View v) Called when a view has been clicked. |
上面的例程中匿名內部類 new OnClickListener { } 實現了OnClickListener介面,這一介面的實現是隱式的。
從上面兩個例子可以看出匿名內部類的特殊之處與作用!
感謝聖思元 張龍老師! java教程
感謝若水! android 教程
相關文章
- 菜鳥提問:如何用java解析htmlJavaHTML
- java內部類,區域性內部類,靜態內部類,匿名內部類Java
- java內部類之成員內部類之匿名內部類Java
- Java內部類詳解--匿名內部類Java
- java內部類之成員內部類Java
- Java 內部類Java
- Java內部類Java
- 10-Java內部類——成員內部類、區域性內部類、匿名內部類Java
- 菜鳥學Java(四)——JSP內建物件JavaJS物件
- java之內部類(InnerClass)----非靜態內部類、靜態內部類、區域性內部類、匿名內部類Java
- Java內部類詳解-- 成員內部類Java
- java內部類,為什麼需要內部類?Java
- Java內部類和匿名內部類的用法Java
- java內部類之成員內部類之區域性內部類Java
- java菜鳥入門Java
- 10、Java——內部類Java
- java內部類案例Java
- 搞懂 JAVA 內部類Java
- Java--內部類Java
- java的內部類Java
- Java內部類詳解--區域性內部類Java
- java內部類之成員內部類例項Java
- Java中的巢狀類、內部類、靜態內部類Java巢狀
- 菜鳥學SSH(十六)——Struts2內部是如何工作的
- Java類與匿名內部類Java
- 菜鳥學Java(二十三)——Java記憶體分析Java記憶體
- Java基礎內部類4-內部類進階Java
- Java基礎10---包、內部類、匿名內部類Java
- Java基礎--Java 內部類Java
- 菜鳥學Java(五)——JSP內建物件之requestJavaJS物件
- 淺談java內部類Java
- Java-InnerClass內部類Java
- Java內部類詳解Java
- Java 內部類詳解Java
- java靜態內部類Java
- JAVA內部類有關Java
- java內部類的理解Java
- JAVA內部類學習Java