java 內部類

內部類
內部類不用建立對象就可以訪問外部類的成員變量和函數,包括私有
外部類要訪問內部類,必須建立內部類對象
內部類可以私有
當內部類中定義了靜態成員,則內部類也應該是靜態的
當外部類中的靜態方法訪問內部類時,內部類也應該是靜態的
//main(){
// 在外部類中實例化內部類
//Inner in =new Inner();
// in.i();
//}

局部內部類
    內部類定義在局部時,不可以被成員修飾符修飾,可以直接訪問外部類中的成員,不能訪問所在局部中的變量,只能訪問被final修飾的局部變量
class Outer{
    int i=10;
public void m(){
    syso("-------------");      
    }
public void f(){
    class Inner{
        int j=10;
        public void t(){
            syso("  "+i+"  "+j);
            }           
        }
    Inner in=new Inner();
        in.t();
    }
main(){
    Outer out =new Outer();
        out.f();
}
}//10  10  

靜態內部類
靜態內部類調用變量   可以使用內部類的變量  可以使用外部類中靜態的變量
class Outer{
    int i=10;
    public void f(){syso("f()...");}
    static class Inner{
        int i=20;
    public void i(){syso(i+"  "+this.i+"                    "+Outer.i);}        
            }   
    }
public class kk{
    main(){
    Outer.Inner in=new Outer.Inner();
    in.i(); 
    }       
    }//20  20  10

 成員內部類
    作爲類成員存在於類內部,可以訪問外部類所有成員方法
    建立在非所屬類中時,需要先建立外部類,Outer.Inner in=new Outer().new Inner();
    內部類訪問外部類成員變量 Outer.this.x
    class Outer{
        int i=10;
        class Inner{
        int i=20;
        public void v(){syso(i+" "+this.i+" "+Outer.this.i);}       
        }       
    }
public class kk{

// Outer out =new Outer();
// Outer.Inner in =out.new Inner();
// in.v()
Outer.Inner in=new Outer().new Inner();
in.v();
}//20 20 10
匿名內部類
內部類必須是繼承一個類或者實現接口。匿名內部類是一個匿名子類對象,而且這個對象是以一個類的形式展現的。
interface Email{
public void Send();
}
public class kk{
//接口不能實例化對象,匿名內部類實現了接口,系統實例化匿名內部類對象傳給email
Email email=new Email(){
public void Send(){
syso("send email");
}
};
email.Send();
}//send email

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章