#隨筆之java匿名內部類
隨筆之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一個接口很奇怪。。。同時我們要明確的是匿名內部類只能用一次,不能在外部復用,所以對於多次使用的類不能用該方法。以上都是個人理解,如有不對望指正~晚安!
#隨筆之java匿名內部類