以前對接口只有概念上的理解,在實際的運用中並沒有太在意接口的使用,甚至於認爲去定義接口是多餘的事情。而且,以往也都有過不好的編程習慣,總是習慣於先寫好實現的類,再去補充那些自認爲無用武之地的接口。現在,當自己開始參與編寫一些比較大的項目時,才真正瞭解到接口在程序設計中的重要作用。
接口使得自己的程序更加靈活,也更加容易擴展。
下面是一個簡單的例子:
接口IPerson
public interface IPerson {
public void smile();
public void talk(String s);
public String getName();
}
類Mary
public class Mary implements IPerson {
private String name;
Mary(String name){
this.name=name;
}
public void smile() {
System.out.println(this.getName()+" :-)");
}
public void talk(String s) {
System.out.println(this.getName()+" Say:"+s);
}
public String getName() {
return name;
}
public void fly(){
System.out.println(this.getName()+" Flying!!!");
}
}
類Tom
public class Tom implements IPerson {
private String name;
Tom(String name){
this.name=name;
}
public void smile() {
System.out.println(this.getName()+" :-)");
}
public void talk(String s) {
System.out.println(this.getName()+" Say:"+s);
}
public String getName() {
return name;
}
main函數,是用來顯示對接口衆多用途中的一種
public class Main {
public static void main(String[] args) {
IPerson p[]=new IPerson[2];
p[0]=new Mary("Mary");
p[1]=new Tom("Tom");
p[0].smile();
p[0].talk("Hello! I am "+p[0].getName());
p[1].smile();
p[1].talk("Hello! I am "+p[1].getName());
}
}
你可以看到,再main函數中,接口可以很好的調用兩個不同的類實例,而且會準確的調用不同實例定義的不同的實現方法。這樣就可以很好的使用接口來操作不同的實例,但前提是,這些實例的類實現了相應的接口,並且,調用的方法是在接口中事先申明過的。所以,你在main方法中是無法執行如下的語句:
p[0].fly();
因爲此方法沒有在接口中申明,你此時可以選擇在接口申明這個方法,或者使用new Mary(“Mary”).fly();來調用這個方法。(在這裏,建議具有普遍性的方法最好不要放在接口中,因爲,如果你將個別的方法放在接口中,那麼導致的結果是,其他的方法也不得不去寫相應方法的實現,雖然它對自身沒有任何用)
最後,引用我同事的一句話:Java接口不僅僅是用來實現C++中的多繼承,它還有更多的用途。