靜態內部類,匿名內部類

package com.innerClass;
 //繼承內部類、接口式匿名內部類、參數式內部類(在方法中要傳一個參數直接new一個接口)
/*使用匿名內部類時,要注意一下幾個原則:
 * 1.不能有構造方法,只能有一個實例(沒有存下對象名字,只能用一次,用完即丟)
 * 2.不能定義任何靜態成員、靜態方法
 * 3.不能是public、protected、private、static
 * 4.必定是在new後面,用其隱含實現一個接口或實現一個類
 * 5.匿名內部類爲局部的,因此局部內部類的全部限制都對其生效
 * 6.內部類優先考慮靜態內部類
 * */
public class NiMingInner {
public static void main(String[] args) {
        //在外部直接使用靜態內部類
//建立靜態內部類對象不須要依賴外部類的對象,在android常用
Outer3.StaticInnerClass stic=new Outer3.StaticInnerClass();
stic.print();
//接口匿名內部類在外部調用
Outer4 outer4=new Outer4();
outer4.print();
//參數式匿名內部類在外部調用,傳一個Child對象
outer4.print2(new Child() {//注意是大括號
@Override
public void desc() {
//把實現套在參數裏面了,也就是在參數中直接實現了接口的方法
System.out.println("參數式匿名內部類");
}
});
}
}
//普通類不能設爲靜態,內部類才行
class Outer4{
//靜態內部類
static class StaticInnerClass{
//靜態內部類不能調用外部類的成員變量,只能用本身的final常量  final int x=10;
public void print(){
System.out.println("static inner class ");
}
}
//接口式匿名內部類調用
public void print(){
Child c=new Child(){//接口式內部類調用,注意後面是;結束
@Override
public void desc() {
System.out.println("匿名內部類對象");
}};
c.desc();//在外面
}
//參數式匿名內部類調用
public void print2(Child c){
c.desc();
}
}
//定義一個藉口,匿名接口內部類
interface Child{
public void desc();
}
相關文章
相關標籤/搜索