java學習之內部類
阿新 • • 發佈:2018-12-26
內部類訪問特點:
1、內部類可以直接訪問外部類中的成員。
2、外部類要訪問內部類,必須建立內部類的物件。
內部類一般用於類的設計。
分析事物時,發現該事物描述中還有事物,而且這個事物還在訪問被描述
1、內部類可以直接訪問外部類中的成員。
2、外部類要訪問內部類,必須建立內部類的物件。
內部類一般用於類的設計。
分析事物時,發現該事物描述中還有事物,而且這個事物還在訪問被描述
事物的內容。這是就把還有的事物定義成內部類來描述。
class Outer1 //外部類 { private int num = 3; class Inner1 //內部類 { void show() { System.out.println("Inner1 show run " + num); } } public void method() { Inner1 in = new Inner1(); //建立內部類物件 in.show(); } } class Outer2 { private static int num = 5; static class Inner2 //靜態內部類 { void show1() { System.out.println("Inner2 show1 run " + num); } static void show2() { System.out.println("Inner2 show2 run " + num); } } } public class InnerClassDemo1 { public static void main(String[] args) { Outer1 out1 = new Outer1(); out1.method(); //直接訪問外部內中的內部類中的成員 Outer1.Inner1 in1 = new Outer1().new Inner1(); in1.show(); //如果內部類是靜態的,相當於一個外部類 Outer2.Inner2 in = new Outer2.Inner2(); in.show1(); //如果內部類是靜態的,其成員是靜態的 Outer2.Inner2.show2(); } }
如果內部類中定義了靜態成員,那麼該內部類也必須是靜態的。
為什麼內部類能直接訪問外部類中的成員?
因為內部類持有了外部類的引用:外部類名.this
內部類在區域性位置上只能訪問區域性中被final修飾的區域性變數。
class Outer { int num = 3; void method() { final int x = 10; //final修飾的區域性變數 class Inner { void show() { System.out.println("Inner show run..." + x); } } Inner in = new Inner(); in.show(); } }