為什麼要有內部類?
類內部裡的類,稱內部類。內部類是為了實現多重繼承,通常是用於建立內部物件用的。
既然說是為了多重繼承,那就先看繼承:
package com.junc.test;
public class test1
}class father
class son extends father
通過繼承關係,我們可以由son來繼承father的money。
只有這一種方法麼?
還有一種方式,那就是內部類,所以說,內部類具備繼承特性。
看如下**:
package com.junc.test;
public class test2
}class father
}}
如果總是寫father.son這樣的**,實在是很麻煩,怎麼辦呢?
如果可以直接從father類呼叫就好了,如果能father.shopping()是不是會更好呢?
當然可以這樣子,看如下**:
package com.junc.test;
public class test2
}class father
}public void shopping()
}
father希望買東西,他有很多son,但他不想知道是哪個son去的,只要東西買回來的就可以了.
所以,我們可以將son匿名,並抽象化,既然匿名了,就取名為匿名內部類吧
package com.junc.test;
public class test2
}abstract class son
class father
};son.sonshopping();
}}
這就會奇怪了,son是abstract的,不能被例項化呀,也就是說,不能new son()。
那麼看仔細了哦,看仔細了,看仔細了。
注意:這裡寫的是new son() {}。
匿名內部類為什麼是這樣的表現形式呢?
當乙個新事物出現,需弄清楚三件事:
匿名內部類要滿足什麼樣的條件?
必須繼承乙個類或實現乙個介面
它是用來做什麼的?
直接使用此類物件,並實現其中的方法
什麼時候使用?
只需要呼叫一次物件的時候使用
表現形式:
而在實際開發中,我們希望的表現形式是直接看到**就可以知道我們想要做什麼,father要fathershopping就指派某個兒子去sonshopping()。用**表示為:father.fathershopping().sonshopping();
分析一下這行**,如果father類直接呼叫fathershopping()方法,代表著fathershopping()方法必然是靜態的,只有靜態的才可以直接由類呼叫。後面的sonshopping()方法必然是由乙個物件所呼叫的,那麼,我們就應該return返回乙個son物件,但我們不一定非要建立,正如前面所說,我們可以由匿名類直接跳過建立。
那麼,整體**又將如何實現呢?
package com.junc.test;
public class test2
}abstract class son
class father };}
}
是否發現,下面這行**:father.fathershopping().sonshopping();
有一種熟悉的味道:system.out.println();
為什麼要有匿名內部類?
匿名內部類實現 這顯然繼承了乙個抽象類,並且在主方法當中建立了抽象類的物件,本來我們是應該先繼承這個抽象類再開始建立物件的,否則物件是無法建立的,但是為了簡便,人們建立了了匿名內部類,允許我們在主方法當中進行抽象類的例項化,同時也可以進行物件的建立。這個程式就等同於如下的程式 以下 原文 出處 舉乙...
內部類,匿名內部類
內部類 概念 自己想到的 內部類是一種可以直接訪問外部類的一類事物 內部類訪問外部類中的成員,包括私有。之所以可以訪問外部類的成員,是因為內部類持有了外部類的乙個引用,格式為 outer.this.x 外部類訪問內部類成員,需要宣告內部類的物件。其他類訪問內部類方法 當內部類處在成員變數的位置時,就...
內部類 匿名內部類
把類定義在其他類的內部,這個類就叫內部類。內部類分為 成員內部類 區域性內部類。內部類訪問特點 內部類可以直接訪問外部類的成員,包括私有。外部類訪問內部類的成員,必須建立物件。區域性內部類是定義在乙個方法或者乙個作用域裡面的類。public class outer 在區域性位置建立內部類物件,調內部...