java----內部類分類
阿新 • • 發佈:2018-11-25
1.成員內部類----成員方法
*******成員內部類不能存在任何static變數或方法,可以訪問外部類的靜態變數
成員內部類需要依附外部類new outter().new inner();
內部類可以使用private封裝,表示私有內部類,該內部類只供外部類使用.
2.靜態內部類----靜態方法
a.靜態內部類的建立不需要外部類,可以直接建立。
b.靜態內部類不可以訪問外部類的任何非static變數
******不能訪問非靜態變數,可以存在自己的成員變數。
static定義一個靜態內部類
class Outer{ //外部類 private static String msg="hello world"; static class Inner{ //定義一個靜態內部類 public void print(){ System.out.println(msg); } } public void fun(){//在外部類中定義一個方法,該方法負責產生內部類物件並呼叫print方法 Inner in=new Inner(); in.print(); } } public class hehe{ public static void main(String[]args){ Outer out=new Outer();//外部類物件 out.fun();//外部類方法 } }
3.方法內部類---成員內部類(沒有靜態變數)
1. 區域性內類不允許使用訪問許可權修飾符 public private protected 均不允許。
2. 區域性內部類對外(方法外)完全隱藏,除了建立這個類的方法可以訪問它其他的地方是不允許訪問的。
3. 區域性內部類要想使用方法形參,該形參必須用final宣告(JDK8形參變為隱式final宣告).
class Outter { private int num; public void display(final int test) {//test最終變數 class Inner { //不能加任何修飾 private void fun() { num++; System.out.println(num); System.out.println(test); } } new Inner().fun(); } } public class mytest { public static void main(String[] args) { Outter out = new Outter(); out.display(20); } }
4.匿名內部類
是方法內部類的特殊版本
1. 匿名內部類是沒有訪問修飾符的。
2. 匿名內部類必須繼承一個抽象類或者實現一個介面
3. 匿名內部類中不能存在任何靜態成員或方法
4. 匿名內部類是沒有構造方法的,因為它沒有類名。
5. 與區域性內部相同匿名內部類也可以引用方法形參。此形參也必須宣告為 final.
interface MyInterface { void test(); } class Outter { private int num; public void display(int para) { // 匿名內部類,實現了MyInterface介面 new MyInterface(){ public void test() { System.out.println("匿名內部類"+para); } }.test(); } } public class mytest{ public static void main(String[] args) { Outter outter = new Outter(); outter.display(20); } }
內部類的特點:
1. 破壞了程式的結構
2. 方便進行私有屬性的訪問。(外部類也可以訪問內部類的私有域)
3. 如果發現類名稱上出現了".",應當立即想到內部類的概念。