インターフェースは、メソッドの署名を定義するコントラクトであり、動作と定数のみであり、すべてのメソッドはパブリックで抽象的です。
Abstract Class
動作と状態を定義すると、いくつかの実装メソッドと抽象メソッドを持つことができます。
あなたの質問の例:
この不完全なインターフェースをクラスに実装する場合、そのクラスは抽象でなければなりません。右?
右
たとえば、1 つのメソッドを除外します。だから今、このクラスを拡張するサブクラスを書いています。次に、インターフェイスの最後のメソッドを実装します。
このメソッドを抽象スーパークラスで呼び出すとどうなりますか? 何もない!できます。しかし、なぜ?
ランタイム実行で原因を実行します。クラスが何であるかを知っています。これがポリモーフィズムです。
この抽象クラスを拡張し、インターフェースの 4 番目のメソッドを実装して、いくつかのクラスを作成するとどうなるでしょうか。どっちが呼ばれる?
クライアントコードでインスタンス化するもの:D
public interface Operation{
void operation1();
void operation2();
}
operation2 は実装していません
public abstract class ClaseBase implements Operation{
//with final im saying childs wont override
public final void operation1{
// do something
operation2();
// do something
}
}
// operation2 は具象クラスであるため、実装する必要があります
public class Child extends ClaseBase{
void operation2(){
System.out.println("Something");
}
}
AbstractClass をインスタンス化することはできません。
クライアントコードで
ClaseBase base = new Child();
base.operation1(); // and it's gonna to call operation2 in childClass
抽象クラスはTemplate Method
パターンで役立ちます。