在Java中,接口和抽象是兩種常見的抽象類型。它們都可以用來定義一些規范或者協議,讓其它類來實現或繼承,以達到代碼復用的目的。
接口是一種純粹的抽象類型,它只定義了一些方法的簽名,沒有任何實現體。下面是一個例子:
public interface Drawable { void draw(); }
在上面的例子中,我們定義了一個Drawable接口,它只有一個方法draw(),沒有實現。其它類如果想要實現Drawable接口,就必須要實現draw()方法,否則編譯會報錯。
抽象則是在一定程度上已經實現了,但仍然不是完整的類。我們通常會將一些通用的實現放到抽象類里面,讓子類來繼承并覆蓋其中的一些實現。下面是一個例子:
public abstract class Shape { protected int x; protected int y; public Shape(int x, int y) { this.x = x; this.y = y; } public abstract void draw(); }
在上面的例子中,我們定義了一個Shape抽象類,它包含了x和y兩個成員變量,以及一個構造函數和一個抽象方法draw()。Shape抽象類中并沒有實現draw()方法,因為每個Shape的子類都有可能有自己的繪制方式,所以由子類來實現這個方法。