abstractの役割が今一つピンときませんでしたが、具象クラスであるサブクラスを作成する際にオーバーライドを強制する、つまり開発者が設定した抽象クラスをプログラマがサブクラス作成時に必ず記述しなければならない、という説明で理解できました。
全てではないでしょうが開発者の意図通りにコーディングさせる手段の一つという解釈でそんなに外していない様です。
abstract class X { // 抽象クラス
protected abstract void methodA();
}
abstract class Y extends X { } // 抽象クラス
class Z extends Y { // 具象クラス
protected void methodA() { } // 具象クラスではオーバーライドは必須
}