答案是可以,而且是必須。。不過不是那種extends的繼承方式,解釋如下:
1.先了解一下匿名內部類:
見名知意,匿名內部類沒有類名,而且和其他類不同,它是一個表達式,語法類似於調用一個類的構造函數,如 A a = new A(){ };
此外還包含一個代碼塊,代碼塊中完成其類的定義
事實上,使用匿名內部類的前提條件就是必須繼承一個父類或實現一個接口
匿名內部類可以使你的代碼更加簡潔,你可以在定義一個類的同時對其進行實例化。它與局部類很相似,不同的是它沒有類名,如果某個局部類你只需要用一次,那么你就可以使用匿名內部類
2.代碼示例:
public class Anonymous { public static void main(String[] args) { /* 匿名類是一個表達式,匿名類的語法就類似於調用一個類的構建函數 new Animals(),除些之外,還包含了一個代碼塊,在代碼塊中完成類的定義 */ Animals a = new Animals(){ public void eat(){ System.out.println("匿名內部類"); } }; a.eat();//調用匿名內部類的方法 } } abstract class Animals{ public abstract void eat(); }
輸出結果就是:匿名內部類
可以節約一個類代碼的定義(也就是直接把子類的代碼放入父類中了)
同理,接口也可以繼承:
interface Animals{
public void eat();
}
匿名內部類內容和上面的一致;
其實我們學習GUI的時候就用過匿名內部類,比如添加監聽事件:
button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // do something }});
這個new ActionListener(){};就是匿名內部類