Class modifiers reference
This page contains reference information for class modifiers.
Valid combinations
The valid combinations of class modifiers and their resulting capabilities are:
Declaration | Construct? | Extend? | Implement? | Mix in? | Exhaustive? | |
---|---|---|---|---|---|---|
class |
Yes | Yes | Yes | No | No | |
base class |
Yes | Yes | No | No | No | |
interface class |
Yes | No | Yes | No | No | |
final class |
Yes | No | No | No | No | |
sealed class |
No | No | No | No | Yes | |
abstract class |
No | Yes | Yes | No | No | |
abstract base class |
No | Yes | No | No | No | |
abstract interface class |
No | No | Yes | No | No | |
abstract final class |
No | No | No | No | No | |
mixin class |
Yes | Yes | Yes | Yes | No | |
base mixin class |
Yes | Yes | No | Yes | No | |
abstract mixin class |
No | Yes | Yes | Yes | No | |
abstract base mixin class |
No | Yes | No | Yes | No | |
mixin |
No | No | Yes | Yes | No | |
base mixin |
No | No | No | Yes | No |
Invalid combinations
Certain combinations of modifiers are not allowed:
Combination | Reasoning |
---|---|
base , interface , and final
|
All control the same two capabilities (extend and implement ), so are mutually exclusive. |
sealed and abstract
|
Neither can be constructed, so are redundant together. |
sealed with base , interface , or final
|
sealed types already cannot be mixed in, extended or implemented from another library, so are redundant to combine with the listed modifiers. |
mixin and abstract
|
Neither can be constructed, so are redundant together. |
mixin and interface , final , or sealed
|
A mixin or mixin class declaration is intended to be mixed in, which the listed modifiers prevent. |
enum and any modifiers |
enum declarations cannot be extended, implemented, mixed in, and can always be instantiated, so no modifiers apply to enum declarations. |