java中四種內部類的基本知識


java中的內部類有四種:
1.靜態內部類:作為類的靜態成員,存在於某個類的內部。
  靜態內部類雖然是外部類的成員,但是在未創建外部類的對象的情況下,可以直接創建靜態內部類的對象。靜態內部類可以引用外部類的靜態成員變量和靜態方法,但不能引用外部類的普通成員。

//靜態內部類的測試程序
public class Outter {
static int a=1;
int b=5;
static void test(){
    System.out.println("外部類的靜態方法");
}
static class Inner{
    public void test2(){
        System.out.println("a的值為"+a);;//直接引用外部類的靜態成員變量
        test();//直接引用外部類的靜態方法
        //b++;試圖引用外部類的非靜態成員變量,不能通過編譯
        System.out.println("靜態內部類的方法");
    }
}
public static void main(String[] args) {
    Inner in=new Inner();//靜態內部類的對象可以直接創建,無需先創建外部類的對象
    in.test2();
}
}
2.成員內部類:作為類的成員,存在於某個類的內部。
  成員內部類可以調用外部類的所有成員,但只有在創建了外部類的對象后,才能調用外部的成員。
 public class Outter1 {
static int a=1;
int b=0;
public static void test1(){
    System.out.println("外部類的靜態方法");
}
public void test2(){
    System.out.println("外部類的非靜態方法");
}

class Inner{
    public void test(){
        System.out.println("在成員內部類的方法中");
        test1();//調用外部類的靜態方法
        test2();//調用外部類的非靜態方法
        System.out.println(a+b);//訪問外部類的靜態成員變量和非靜態成員變量
    }
}
public static void main(String[] args) {
    //Inner in=new Inner();成員內部類的對象不能直接創建,會報錯
    Outter1 out=new Outter1();//先創建外部類的對象
    Inner in=out.new Inner();//注意:!!成員內部類的對象必須通過外部類的對象創建
}
}
3.局部內部類:存在於某個方法的內部。
  局部內部類只能在方法內部中使用,一旦方法執行完畢,局部內部類就會從內存中刪除。
  必須注意:如果局部內部類中要使用他所在方法中的局部變量,那么就需要將這個局部變量定義為final的。

public class Outter2 {
int a=10;
public void test(){
    final int c=5;

  System.out.println("在外部類的方法中");
    class Inner{
        int b=20;
        void test1(){
            System.out.println("局部內部類的方法中");

            System.out.println(c);//注意:如果局部內部類中要使用他所在方法中的局部變量,那么就需要將這個局部變量定義為final的。
        }
    }
    Inner inner=new Inner();
    inner.test1();
}

public static void main(String[] args) {
    Outter2 outter=new Outter2();
    outter.test();
}
}
4.匿名內部類:存在於某個類的內部,但是無類名的類。

  匿名內部類的定義與對象的創建合並在一起,匿名內部類一般通過如下形式定義,並且在定義的同時進行對象的實例化。

  new 類或者接口的名字(){

  //匿名內部類的主體,大括號中是匿名內部類的主體,這個主體就是類或者接口的實現,如果是類,那么匿名內部類是該類的子類,如果是接口,匿名內部類需要完成接口的實現。

}

class Person{
    public void show(Message message){
        message.show();
    }
}

class Message{
    public void show(){
        System.out.println("在Message類中");
    }
}

public class Outter3 {
    public static void main(String[] args) {
        Person person=new Person();
        person.show(new Message(){
            public void show(){
                System.out.println("在匿名內部類中");
            }
        });
    }
}

}

 java中絕大多數情況下,類的訪問修飾符只有public和默認這兩種,但也有例外。靜態內部類和成員內部類還可以有protected和private兩種

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM