次のインターフェースと抽象クラスの違いは何ですか?
public interface MyInterface
{
public int get1();
public int get2();
public int get3();
}
public abstract class MyAbstract
{
public abstract int get1();
public abstract int get2();
public abstract int get3();
}
インタビュアーは次の答えに納得していませんでした。彼は何か他のことを聞きたかったのです。
MyAbstractを拡張する必要があり、それ以上拡張することはできませんが、MyInterfaceを実装する場合は、継承を受け入れることができます。
「implementsMyInterface」を使用する場合は、3つのメソッドすべての実装を提供する必要がありますが、「extends MyAbstract」の場合は、抽象性を引き継ぐことができます。
設計の観点:すべてのライブラリは抽象クラスではなくインターフェイスで動作します。将来いつでもライブラリのメソッドで使用できるクラス(MyInterfaceを実装)を作成できるように、インターフェイスを使用することをお勧めします。(基本的にポイント1と同じ)
他に何がありますか?インターフェイス/抽象クラスなどの変数には関心がありません。どちらを使用するかを決定するにはどうすればよいですか?