1) Is it normal that in the abstract class Figure2D there are methods with the body (parent methods that need to be implemented)
The main difference between an interface and an abstract class is that an abstract class can contain not only an operation declaration, but also an implementation.
At the same time, an abstract class may contain not only virtual methods (declaration + default implementation), but also may contain non-virtual methods that define the basis of some algorithm that is stable for all subclasses, but with some variable step, which is determined by a specific heir.
Behind this intricate description is one of the most common design patterns, called the Template Method , which is fundamental to creating user-friendly type hierarchies.
It looks like this:
abstract class Shape {} abstract class Shape2D : Shape { public void Draw() { DrawFirstPart(); DrawSecondPart(); FillShape(); } protected abstract DrawFirstPart(); protected abstract DrawSecondPart(); protected abstract FillShap(); }
2) Is it normal that an abstract class has virtual methods (that is, a class is both polymorphic and abstract)?
The presence of specific methods in the abstract class does not make it "concrete" or "polymorphic." Any abstract class will contain an implementation, otherwise you would use the interface.