一.問題引入
前兩天學代理模式的時候想到的,接口可不可以new呢?
接口是特殊的抽象類,接口的方法都默認為 public abstract 的。。。 抽象的方法不能new的哦,不能被實例化,為什么new ActionListener(){} 可以?不多說了,直接看資料。
二.若干資料
Java不能同時繼承多個類,但是可以繼承多個接口;接口可以用來變相的繼承多個類;為什么new ActionListener(){} 可以這樣,接口可以被new嗎?new ActionListener(){} 這種形式,是要在{}中重寫接口中的方法。接口不能new ,不過可以生成一個匿名類,當然,匿名類不止實現接口這一種。省略了寫一個具體類實現ActionListener接口的開銷。
接口不能直接new,但是它可以作為別的類的變量。如果有類實現了這個接口,則可以new! 舉一個簡單的例子:java.lang.List是一個接口,但是List<String> list=new ArrayList<String>();是沒有任何錯誤的,因為ArrayList實現了List接口。接口編程是為了實現多繼承,在java web中的spring框架下用到十分多。
三.簡單例子
實現匿名類。最簡單的線程類,可以這么寫。Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub
}});-------------------------------------------------------------------------------------------------------------------------
class Test {
int start=1;
int end=100;
public static void main(String[] args) {new Test().go();
}void go() {
Runnable a=new Runnable() {
public void run() {for(int i=start;i<end;i++)System.out.println(i);}};Thread t=new Thread(a);
t.start();}}