141 votes

Comment appeler un super constructeur en Dart ?

Comment appeler un super constructeur en Dart ? Est-il possible d'appeler des super-constructeurs nommés ?

204voto

Eduardo Copat Points 4021

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 .

38voto

Soban Arshad Points 709

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");
    }
}

16voto

ikamaru Points 141

Cas d'un constructeur avec des paramètres optionnels

class Foo {
  String a;
  int b;
  Foo({this.a, this.b});
}

class Bar extends Foo {
  Bar({a,b}) : super(a:a, b:b);
}

10voto

user1047788 Points 80

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);
}

4voto

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X