The abstract
modifier is used to indicate that a class is incomplete and intended only to be a base class of other classes. An abstract class differs from a non-abstract class is the following ways:
new
operator on an abstract class. While it is possible to have variables and values whose compile-time types are abstract, such variables and values will necessarily either be null
or contain references to instances of non-abstract classes derived from the abstract types.When a non-abstract class is derived from an abstract class, the non-abstract class must include actual implementations of all inherited abstract methods and accessors. Such implementations are provided by overriding the abstract methods and accessors. In the example
abstract class A { public abstract void F(); } abstract class B: A { public void G() {} } class C: B { public override void F() { // actual implementation of F } }
the abstract class A
introduces an abstract method F
. Class B
introduces an additional method G
, but doesn’t provide an implementation of F
. B
must therefore also be declared abstract. Class C
overrides F
and provides an actual implementation. Since there are no outstanding abstract methods or accessors in C
, C
is permitted (but not required) to be non-abstract.