An abstract method defines an operation that subclasses must provide without implementing the operation itself. It belongs in a shared parent class when every child should perform the same responsibility differently. section 4.1.3
A practical inheritance design uses an abstract method to:
- Keep shared attributes and behavior in a parent class such as Shape. section 4.1.3
- Require each concrete child, such as Rectangle or Circle, to implement its own draw() method. section 4.1.3
- Support additional shapes while keeping the application’s common structure maintainable. section 4.1.3
Shapes that draw themselves
Shape declares draw() but does not provide its functionality. Rectangle inherits from Shape and overrides draw() with rectangle-rendering code; Circle supplies a different implementation. Shape should not be instantiated directly, while concrete shapes can be drawn by the application. section 4.1.3

