Comment appeler un super constructeur en Dart ? Est-il possible d'appeler des super-constructeurs nommés ?
Réponses
Trop de publicités?Oui, c'est le cas, la syntaxe est proche de C# Voici un exemple avec un constructeur par défaut et un constructeur nommé :
class Foo {
Foo(int a, int b) {
//Code of constructor
}
Foo.named(int c, int d) {
//Code of named constructor
}
}
class Bar extends Foo {
Bar(int a, int b) : super(a, b);
}
class Baz extends Foo {
Baz(int c, int d) : super.named(c, d);
}
Si vous souhaitez initialiser les variables d'instance dans la sous-classe, la fonction super()
doit être le dernier d'une liste d'initialisation.
class CBar extends Foo {
int c;
CBar(int a, int b, int cParam) :
c = cParam,
super(a, b);
}
Vous pouvez lire les motivations de ce projet super()
directive d'appel sur /r/dartlang .
C'est un fichier que je partage avec vous, exécutez-le tel quel. Vous apprendrez comment appeler le super constructeur, et comment appeler le super constructeur paramétré.
// Objectives
// 1. Inheritance with Default Constructor and Parameterised Constructor
// 2. Inheritance with Named Constructor
void main() {
var dog1 = Dog("Labrador", "Black");
var dog2 = Dog("Pug", "Brown");
var dog3 = Dog.myNamedConstructor("German Shepherd", "Black-Brown");
}
class Animal {
String color;
Animal(String color) {
this.color = color;
print("Animal class constructor");
}
Animal.myAnimalNamedConstrctor(String color) {
print("Animal class named constructor");
}
}
class Dog extends Animal {
String breed;
Dog(String breed, String color) : super(color) {
this.breed = breed;
print("Dog class constructor");
}
Dog.myNamedConstructor(String breed, String color) : super.myAnimalNamedConstrctor(color) {
this.breed = breed;
print("Dog class Named Constructor");
}
}
Puis-je appeler un constructeur privé de la superclasse ?
Oui, mais seulement si la superclasse et la sous-classe que vous créez se trouvent dans la même bibliothèque. (Les identificateurs privés étant visibles dans toute la bibliothèque dans laquelle ils sont définis). Les identificateurs privés sont ceux qui commencent par un trait de soulignement.
class Foo {
Foo._private(int a, int b) {
//Code of private named constructor
}
}
class Bar extends Foo {
Bar(int a, int b) : super._private(a,b);
}
Comme dart supporte l'implémentation d'une classe en tant qu'interface ( Interfaces implicites ), vous ne pouvez pas appeler le constructeur parent si vous mis en œuvre vous devez utiliser étend . Si vous utilisez met en œuvre le changer en étend et utiliser la solution d'Eduardo Copat.
- Réponses précédentes
- Plus de réponses