我所理解的接口和抽象類
參考: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