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?