Extend a class
Use extends
to create a subclass, and super
to refer to the superclass:
class Television {
void turnOn() {
_illuminateDisplay();
_activateIrSensor();
}
// ···
}
class SmartTelevision extends Television {
void turnOn() {
super.turnOn();
_bootNetworkInterface();
_initializeMemory();
_upgradeApps();
}
// ···
}
For another usage of extends
, see the discussion of parameterized types on the Generics page.
Overriding members
#Subclasses can override instance methods (including operators), getters, and setters. You can use the @override
annotation to indicate that you are intentionally overriding a member:
class Television {
// ···
set contrast(int value) {...}
}
class SmartTelevision extends Television {
@override
set contrast(num value) {...}
// ···
}
An overriding method declaration must match the method (or methods) that it overrides in several ways:
- The return type must be the same type as (or a subtype of) the overridden method's return type.
- Parameter types must be the same type as (or a supertype of) the overridden method's parameter types. In the preceding example, the
contrast
setter ofSmartTelevision
changes the parameter type fromint
to a supertype,num
. - If the overridden method accepts n positional parameters, then the overriding method must also accept n positional parameters.
- A generic method can't override a non-generic one, and a non-generic method can't override a generic one.
Sometimes you might want to narrow the type of a method parameter or an instance variable. This violates the normal rules, and it's similar to a downcast in that it can cause a type error at runtime. Still, narrowing the type is possible if the code can guarantee that a type error won't occur. In this case, you can use the covariant
keyword in a parameter declaration. For details, see the Dart language specification.
noSuchMethod()
#To detect or react whenever code attempts to use a non-existent method or instance variable, you can override noSuchMethod()
:
class A {
// Unless you override noSuchMethod, using a
// non-existent member results in a NoSuchMethodError.
@override
void noSuchMethod(Invocation invocation) {
print('You tried to use a non-existent member: '
'${invocation.memberName}');
}
}
You can't invoke an unimplemented method unless one of the following is true:
The receiver has the static type
dynamic
.The receiver has a static type that defines the unimplemented method (abstract is OK), and the dynamic type of the receiver has an implementation of
noSuchMethod()
that's different from the one in classObject
.
For more information, see the informal noSuchMethod forwarding specification.
Unless stated otherwise, the documentation on this site reflects Dart 3.6.0. Page last updated on 2024-12-16. View source or report an issue.