抽象クラス(''abstract class'')は、抽象メソッド(''abstraction method'')を1つ以上持つクラスを指します。
抽象メソッドは具体的な処理内容を記述せず、メソッド名と引数と戻値の型の定義（シグネチャー）だけを宣言するメソッドです。
抽象クラスの宣言:
abstract class クラス名 {
  //
}
抽象メソッドの宣言:
  abstract 戻値の型 メソッド名(引数の型 引数名);
抽象クラスは、それ自体はインスタンス化することは出来ません。
インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
また、抽象クラスを super() を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド（具象メソッド）を持つことも、データメンバーも持つことも出来ます。
次の例では、Shapeのコンストラクターが抽象クラスの具象メソッドとなっています。
次のプログラムは、二次元座標系の図形について扱っています。
コード例:
abstract class Shape {
    double x, y;
    Shape(double x, double y) {
        this.x = x;
        this.y = y;
    }
    abstract public String toString();
    abstract public double area();
}
class Square extends Shape {
    double wh;
    Square(double x, double y, double wh) {
        super(x, y);
        this.wh = wh;
    }
    public String toString() {
        return String.format("Square(%f, %f, %f)", this.x, this.y, this.wh);
    }
    public double area() {
        return this.wh * this.wh;
    }
}
class Recrangle extends Shape {
    double w, h;
    Recrangle(double x, double y, double w, double h) {
        super(x, y);
        this.w = w;
        this.h = h;
    }
    public String toString() {
        return String.format("Rectanle(%f, %f, %f, %f)", this.x, this.y, this.w, this.h);
    }
    public double area() {
        return this.w * this.h;
    }
}
class Circle extends Shape {
    double r;
    Circle(double x, double y, double r) {
        super(x, y);
        this.r = r;
    }
    public String toString() {
        return String.format("Square(%f, %f, %f)", this.x, this.y, this.r);
    }
    public double area() {
        return 3.1425926536 * this.r * this.r;
    }
}
class Main {
    public static void main(String[] args) {
        Shape[] shapes = {
            new Square(5.0, 10.0, 15.0),
            new Recrangle(13.0, 23.0, 20.0, 10.0),
            new Circle(3.0, 2.0, 20.0),
        };
        for (Shape shape: shapes) {
            System.out.println(String.format("%s: %f", shape, shape.area()));
        }
    }
}
実行結果:
Square(5.000000, 10.000000, 15.000000): 225.000000
Rectanle(13.000000, 23.000000, 20.000000, 10.000000): 200.000000
Square(3.000000, 2.000000, 20.000000): 1257.037061
abstract class Shape:抽象クラス図形；他のクラスはこのクラスを継承。
Shape(double x, double y):コンストラクター；private ですが、継承したクラスのコンストラクターから super として参照されるだけなので構いません。
class Square:具象クラス正方形；Shapeを継承
Square(double x, double y, double wh):コンストラクター；追加の引数は一辺の長さ。
class Rectangle:具象クラス長方形；Shapeを継承
Rectangle(double x, double y, double w, double h):コンストラクター；追加の引数は幅と高さ。
class Circle:具象クラス円；Shapeを継承
Circle(double x, double y, double r):コンストラクター；追加の引数は半径。
Shape[] shapes:図形の配列；Shapeを継承したクラスのインスタンスは３つとも要素になれますが、当のShapeはインスタンス化出来ないので要素になれません。
for (Shape shape: shapes) ...
Shapeを継承したクラスのインスタンスが来ることは判っているので、これでイテレーション出来ます。
呼んでいるメソッドも、抽象メソッドなので具体的なクラスは（Shapeを継承しているので）問いません。