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 can't be extended, implemented, mixed in, and can always be instantiated, so no modifiers apply to enum declarations. |
extension type and any modifiers | extension type declarations can't be extended or mixed in, and can only be implemented by other extension type declarations. |