Abstract classes can't be instantiated(you can't create objects of their type), but they can be subclassed. Which means that another class could inherit all of its methods and attributes; whether those methods are abstract or not is up to the designer.
Example: Assume Java doesn't actually have a Math class
The PI constant in the shape class can be used by the Circle class. This is a poor example because Java provides a Math class that holds constants like PI.
You could have yes. But in this case Shape was abstract because you wouldn't just want to create a generic Shape object. You wouldnt know how to find the volume of a "Shape", or its circumference, etc..
"If the facts don't fit the theory, get new facts" --Albert Einstein