我所理解的接口和抽象類
參考:https://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html
在實踐過程中,抽象類和接口都經常用到。但是,對於什麼情況下該用抽象類,什麼情況下該用接口,總是有點搞不清楚。
於是,在閱讀別人對著兩者理解之後,終於對兩者的區別有了更進一步的理解。
有關這兩者的一些基本區別,可以參考上麵的文章。這裏我隻介紹下對於抽象和接口該在什麼情況下使用的理解。
抽象類重點在於對於屬性和方法的繼承;而接口則重在多個類(可能他們之間毫無聯係)對同一種方法或者屬性的描述,體現了多態性。
抽象出一個類(類),定義一個抽象方法(判斷是否會飛)
1、抽象類
例如:抽象出一個鳥類。對於鳥類,抽象出一個方法。用來判斷這種鳥會不會飛。
由於鳥類中的canFly是抽象方法,因此所有繼承鳥類的子類都必須實現這個canFly方法。
/** * 鳥 */ public abstract class Bird { public abstract boolean canFly(); } /** * 燕子 * */ public class Swallow extends Bird{ @Override public boolean canFly() { // TODO Auto-generated method stub return false; } } /** * 貓頭鷹 * */ public class Owl extends Bird{ @Override public boolean canFly() { // TODO Auto-generated method stub return false; } }
假如現在有這種狀況。要同時描述鳥類和飛機,它們可以有一個共同的方法來判斷是否能飛。但是這個時候,兩者肯定是沒有繼承關係的啦。
你不能指望飛機通過繼承鳥類來獲得這個canFly的方法。
此時,你就可以把canFly抽象到接口中,然後鳥類和飛機都繼承這個接口。
2、接口
public interface IFly { public abstract boolean canFly(); } /** * 鳥 */ public class Bird implements IFly{ @Override public boolean canFly() { // TODO Auto-generated method stub return false; } } /** * 飛機 * */ public class Airplane implements IFly { @Override public boolean canFly() { // TODO Auto-generated method stub return true; } }
最後更新:2017-04-02 16:47:59