JAVA物件導向基礎--N種內部類

月亮警察發表於2024-03-11

一、成員內部類

//外部類  Outer(外部)
public class Outer {
    //私有屬性
    private int id = 10;
    //方法
    public void out(){
        System.out.println("輸出外部類的方法!");
    }

    //定義內部類
    public  class Inter{
        public  void in(){
            System.out.println("輸出內部類的方法!");
        }

        //獲取外部類的私有屬性id
        public void getID(){
            System.out.println(id);
        }
    }
}
public class Application {
    public static void main(String[] args) {
        //例項化外部類
        Outer outer = new Outer();
        outer.out();//呼叫外部類的方法
        //例項化內部類
        //透過外部類來例項化內部類
        Outer.Inter inter = outer.new Inter();
        inter.in();//呼叫內部類的方法

        inter.getID();//獲取外部類的私有屬性
    }
}

執行效果圖如下:

注意:如果內部類是靜態類,則無法獲取外部類的屬性

  • 原因:靜態類會先例項化,比id屬性載入要早
//定義內部類
public static class Inter{
   public void in(){
      System.out.println("輸出內部類的方法!");
   }

//獲取外部類的私有屬性id
    public void getID(){
       System.out.println(id);//報錯!!!!
    }
}
  • 解決方法:把id也設定為靜態
private static int id = 10;

二、區域性內部類

public class Part {
    public void method(){
        //區域性內部類
        class Inter{
            //方法
            public void test(){
                
            }
        }
    }
}

三、匿名內部類

public class Anonymity {
    //匿名內部類
    public static void main(String[] args) {
        //沒有名字的初始化類,不用將例項儲存到變數中
        new Inter().test();
    }
}
//類
class Inter{
    public void test(){
        System.out.println("test");
    }
}

注意:也可以例項化介面

public class Anonymity {
    //匿名內部類
    public static void main(String[] args) {
        //沒有名字的初始化類,不用將例項儲存到變數中
        //new Inter().test();
        new Inter_2(){
            @Override
            public void test_2() {
            }
        };
    }
}
//介面
interface Inter_2{
    void test_2();
}

相關文章