Abstract classes in Java

abstract class Shape {
    public abstract void fill(Color color);

    public void draw() {
        //Draw implementation
    }
}

class Square extends Shape {
    public void fill(Color color) {
        //Fill implementation
    }
}

Shape shape = new Shape(); // <-error

Square square = new Square();
square.fill(Color.Red);
square.draw();