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. |