Ok, starting to feel like I'm missing something obvious... The abstract keyword in the language reference states: "Functions declared as abstract can still have function bodies. This is so that even though they must be overridden, they can still provide �base class functionality.�"
So, "they must be overridden." Does the compiler do *anything* to verify this for a child class? This compiles: import std.stdio; public abstract class Parent { public void hasDefinition() { writeln("I have a definition"); } public abstract void noDefinition(); } public class Child : Parent { public void unRelated() { writeln("Unrelated"); } } void main() { Child child; } However, if I change main() to: void main() { Parent instance = new Child(); } I get "cannot create instance of abstract class Child | function noDefinition is abstract" Why is a reference / use of child in the context of a parent required just to validate that the class is a valid extension of the parent? More to the point, why does the first case even compile?