Java 內部類

Java 內部類分爲:成員內部類,靜態嵌套類,方法內部類,匿名內部類。
spa

(1)內部類仍然是一個獨立的類,在編譯以後會被編譯成獨立的.class文件,可是前面冠之外部類的類名和$符號。
code

(2)內部類不能用普通的方式訪問。內部類是外部類的一個成員,所以內部類能夠自由地訪問外部類的成員變量,不管是不是private。htm

(3)內部類聲明成靜態的,就不能隨便的訪問外部類的成員變量了,此時內部類只能訪問外部類的靜態成員變量。繼承


成員內部類:接口

class A{get

    class B{}
編譯

}class

編譯上述代碼會產生兩個文件:A.class和B.classtest

方法內部類變量

把類放在方法裏

public class A{

    public int f()

    {

    private class B{

        int i=10;

    }

    return new B().i;

    }

    public static void main(String[] args)

{

    A a= new A();

    system.out.printfln(af());

}

}


匿名內部類--用於臨時建立實例,且該實例不但願類的使用者關注

匿名內部類就是沒有名字的內部類。什麼狀況下須要使用匿名內部類?若是知足下面的一些條件,使用匿名內部類是比較合適的:

·只用到類的一個實例 。

·類在定義後立刻用到。

·類很是小(SUN推薦是在4行代碼如下)

·給類命名並不會致使你的代碼更容易被理解。


在使用匿名內部類時,要記住如下幾個原則:

·匿名內部類不能有構造方法

·匿名內部類不能定義任何靜態成員、靜態方法。

·匿名內部類不能是public,protected,private,static。

·只能建立匿名內部類的一個實例。

·一個匿名內部類必定是在new的後面,用其隱含實現一個接口或實現一個類。

·因匿名內部類爲局部內部類,因此局部內部類的全部限制都對其生效。

(1)繼承式的匿名內部類

    abstract class person{

    public abstract void eat();

}

public class test{

    public static void main(String [] args)

{

    person p =new person(){

            public void eat(){

                system.out.printfln("吃");

    };

    p.eat;

}

}

}

(2)接口式的匿名內部類

interface Person {
     public void eat();
}
 
public class Demo {
     public static void main(String[] args) {
         Person p = new Person() {
             public void eat() {
                 System.out.println( "eat something" );
             }
         };
         p.eat();
     }
}

(3)參數式的匿名內部類

class Bar{

void doStuff(Foo f){

f.foo();

}

}

interface Foo{

void foo();

}

class Test{

static void go(){

Bar b = new Bar();

b.doStuff(new Foo(){

public void foo(){

System.out.println("foofy");

}

});

}

}


靜態嵌套類

相關文章
相關標籤/搜索