Note(4):對接口的理解(一)

以前對接口只有概念上的理解,在實際的運用中並沒有太在意接口的使用,甚至於認爲去定義接口是多餘的事情。而且,以往也都有過不好的編程習慣,總是習慣於先寫好實現的類,再去補充那些自認爲無用武之地的接口。現在,當自己開始參與編寫一些比較大的項目時,才真正瞭解到接口在程序設計中的重要作用。

接口使得自己的程序更加靈活,也更加容易擴展。

 

下面是一個簡單的例子:

接口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++中的多繼承,它還有更多的用途。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章