隨筆之java匿名內部類 從今天起開始每日一篇技術博客,當然這隻是我當天所學的一些隨筆,裡面或多或少會有理解不當的地方,希望大家多多指教,一起進步! 在講匿名內部類之前,先講講內部類的一些概念。 1.內部類:顧名思義,內部類就是寫在一個類裡面的類(廢話),這裡大家可能會問了,為什麼我們不直接寫一個c ...
隨筆之java匿名內部類
從今天起開始每日一篇技術博客,當然這隻是我當天所學的一些隨筆,裡面或多或少會有理解不當的地方,希望大家多多指教,一起進步!
在講匿名內部類之前,先講講內部類的一些概念。
1.內部類:顧名思義,內部類就是寫在一個類裡面的類(廢話),這裡大家可能會問了,為什麼我們不直接寫一個class呢,非要寫在內部。原因很簡單,內部類一方面是有很好的封裝性,要通過外部類對象才能訪問(具體實例見下方代碼)。另一方便定義起來很方便。最後,內部類還可以騷氣地實現多重繼承,因為外部類是否繼承或實現一個抽象類或介面對內部類毫無影響,內部類依然可以去繼承,這樣是一種變相的多繼承。接下來我們看一下內部類的一個實例
/**
@author lw
*/
public class InnerClassTest {
class InnerClass
{
//public InnerClass(){}
public void B()
{
System.out.println("這是內部類方法");
}
}
public static void main(String args[])
{
InnerClassTest i=new InnerClassTest();
i.new InnerClass().B();
}
}
從這個程式可以看到,我們在實例化內部類時,需要藉助外部類的對象,否則會報錯。但如果類改為static,就可以直接調用。
內部類除了可以直接定義在類中,還可以定義在類的方法中,但需註意的是該類只能在本方法中實例化。
好了,講了那麼多廢話,開始進入正題,匿名內部類!有沒有很開心??==
首先還是從概念說起,匿名內部類的兩個特征,一是匿名,而是內部類(哈哈哈又是廢話)。
我們通過一個實際的例子來理解這個東西。
TestInterface介面
/**
* @author lw * */
public interface TestInterface {
public void print();
}
InnerClassTest.class(和內部類名字一樣,偷了個懶)
`
/**
* @author lw
*/
public class InnerClassTest {
public static void main(String args[])
{
TestInterface test=new TestInterface()//new一個介面很奇怪。。。
{
public void print()
{
System.out.println("匿名內部類");
}
};
test.print();
}
}
這裡我們可以看到,匿名內部類的好處主要在於簡化代碼,用專業一點的話來說就是寫得比較優雅,如果不用匿名內部類的話我們要實現該介面需要新建一個class,然後實現,但可以想象,如果這個類我們只用一次呢?這樣的新建class是不是完全沒有必要,用匿名類的方法就可以直接簡潔地實現了。我們需要註意的是匿名內部類一定要對應一個父類或者介面,然後在裡面實現其需要的方法,額雖然在寫的時候new一個介面很奇怪。。。同時我們要明確的是匿名內部類只能用一次,不能在外部復用,所以對於多次使用的類不能用該方法。以上都是個人理解,如有不對望指正~晚安!