眾所周知普通類如果實現一個接口,那么普通類需要重寫接口中的所有方法
但是抽象類實現接口,可以完全覆蓋/重寫 接口中的方法,也可只重寫接口中的某幾個方法
子類再繼承抽象類時,子類重寫的方法即為抽象類中未重寫接口中的方法。
在Java中,使用抽象類來實現接口,並不是毫無作用。相反,有時間有很大的作用。
當你只想實現接口中的個別方法(不是所有方法)時,你可以先寫一個抽象類來實現該接口,並實現除了你想要的方法之外的所有方法(方法體為空)。接着再用你的類繼承這個抽象類,這個類中就只用實現你需要的方法了,這樣就可以達到你的需要了。但是,如果你直接實現接口的話,你就需要實現接口的所有方法。
通過下面例子,可以很好的理解:
例:有一個接口Window,有三個方法,draw(),putColor(),setPosition()三個方法,程序員在設計頁面時只關注對其進行位置定位(畫圖draw()和着色putColor()則由美工實現),所以他只需要實現setPosition()方法,而其余兩個不用實現。則設計如下:
//接口
interface Window{
public void draw();
public void putColor();
public void setPosition();
}
/**
*抽象類,不實現需要的方法。而實現的不需要的方法的方法體設為空,
*/
abstract class DesignedPage implements Window{
public void draw(){}
public void putColor(){}
}
/**
* 具體實現類,實現特定的方法,該類中只有需要的方法
*/
public class DesingedPageA extends DesignedPage{
public void setPosition(){
//set the window position
}
}
通常情況下,如果我們需要在具體實現類中實現draw()方法時,都是調用父類的draw()方法(super.draw())。