靜態內部類和成員內部類有區別嗎?調用兩者中的方法不一樣是嗎?如何區別?
?順便看下這個代碼中的調用方法哪里不對?
//外部類
public class HelloWorld {
???
??? // 外部類中的靜態變量score
??? private static int score = 84;
???
??? // 創建靜態內部類
?public??? static????? class SInner {
??????? // 內部類中的變量score
??????? int score = 91;
???????
??public void show() {
???System.out.println("訪問外部類中的score:" +HelloWorld.score??????????? );
???System.out.println("訪問內部類中的score:" + score);
??}
?}
?// 測試靜態內部類
?public static void main(String[] args) {
??// 直接創建內部類的對象
??????? HelloWorld hello=new HelloWorld();
??????? SInner si=hello.new SInner();
???????
??????? // 調用show方法
??si.show();
?}
}
2015-09-23
你可以把靜態內部類、成員內部類 與 靜態變量、成員變量類比來看。
靜態的東西是屬于 一個類(或者說這個類所有對象共有的),成員的東西是屬于一個具體對象的,當你每實例化了一個對象,這些對象都會擁有各自的成員變量,非靜態方法。當然靜態內部類,成員內部類也與此類似。
public class HelloWorld {
????
??? // 外部類中的靜態變量score
??? private static int score = 84;
????
??? // 創建靜態內部類
?public??? static????? class SInner {
??????? // 內部類中的變量score
??????? int score = 91;
????????
??public void show() {
???System.out.println("訪問外部類中的score:" +HelloWorld.score??????????? );
???System.out.println("訪問內部類中的score:" + score);
??}?
?}
?// 測試靜態內部類
?public static void main(String[] args) {
??// 直接創建內部類的對象
??????? HelloWorld hello=new HelloWorld();
??????? SInner si=hello.new SInner();
????????
??????? // 調用show方法
??si.show();
?}
}
我認為畫橫線的部分寫的有些問題(當然你這樣寫也不會報錯),靜態內部類(想一下靜態方法)的實例用外部類類名去調用就可以了,像是這樣:
new HelloWorld. SInner();至于為什么不是HelloWorld.new SInner()自己好好體會一下吧,new+一個類才是實例化一個對象的表達式。
2015-09-23
?HelloWorld hello=new HelloWorld();
??????? SInner si=hello.new SInner();? ? ? ??
??????? // 調用show方法
??si.show();
改為HelloWorld.SInner si=new HelloWorld.SInner();
????si.show();更合適