一些基礎知識點慢慢掌握理解,以前還是很菜的。
首先拋出一個命題,一個類文件中可以有多個public 修飾的類么?可以
答案就是用public修飾成員內部類。
java有4種內部類:
首先四種內部類有共同的性質:
1、都是獨立的類,在編譯后都會產生.class文件,內部類以“外部類$內部類.class”文件和外部類在同一文件夾下面。
2、內部類(靜態內部類有區別)可以訪問外部類的任何屬性和方法,無論是否是PRivate的
1、靜態內部類;
public class OuterClass { static class innerClass{} }①:靜態內部類它可以不依賴于外部類實例而被實例化,而通常內部類需要在外部類實例化之后才能被實例化。②:靜態內部類不能與外部類有相同的名字,不能訪問外部類的普通成員變量,只能訪問外部類中靜態成員和靜態方法(包括private的)
2、成員內部類;
public class OuterClass { class innerClass{} }①:它可以自由的應用外部類的屬性和方法,無論這些是靜態還是非靜態的。②:但是不能定義靜態的方法或者屬性,應為他和一個實例綁定在一起了。
③:只有外部類被實例化后,這個類才能被實例化。
3、局部內部類;
public class OuterClass { public void menberFunction(){ class InnerClass{} }}①:局部內部類和局部變量一樣,不能被public、protected、private、以及static修飾。②:只能訪問方法中定義為final類型的局部變量。
4、匿名內部類;
public class OuterClass extends Frame{ public OuterClass(){ addWindowListener(new WindowAdapter() { //匿名內部類 }); }}①:是一種沒有類名的內部類,代碼很簡介,緊湊,一般用于GUI編程中事先事件處理最后借用一道題來加深理解:
有如下代碼:
public class OuterClass { public void method(){ //Line3 } public class Inner{} public static void main(String[] args){ OuterClass oc = new OuterClass() //Line8 }}一下哪幾項是正確的?A:new Inner(); //line3
B:new Inner(); //line8
C:new Outer.Inner(); //line 8
D:new o.Inner(); //line8
答案是A;
非靜態的內部類初始化必須要依賴于外部類,而a中,能夠調用method方法,外部類肯定已經初始化了,所以能夠直接new inner()。
如果line8中填:oc.new Inner(); 則可以通過,借助外部類,從而實例化內部類。
如果內部類inner聲明為static的,則b也對。
很基礎的東西,如果有哪里不對,還請各位指正
新聞熱點
疑難解答