web-dev-qa-db-fra.com

Comment appeler un super constructeur dans Dart?

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

50
Eduardo Copat

Oui, c'est vrai, la syntaxe est proche de C # , voici un exemple avec le constructeur par défaut et le 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 des variables d'instance dans la sous-classe, l'appel 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 la motivation derrière cette super() directive d'appel sur / r/dartlang .

67
Eduardo Copat

Puis-je appeler un constructeur privé de la superclasse?

Oui, mais uniquement si la superclasse et la sous-classe que vous créez se trouvent dans la même bibliothèque. (Étant donné que les identifiants privés sont visibles dans toute la bibliothèque, ils sont définis dans). Les identifiants 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);
}
5
user7610

Comme Dart prend en charge l'implémentation d'une classe en tant qu'interface ( interfaces implicites ), vous ne pouvez pas appeler le constructeur parent si vous l'implémentez vous devez utiliser étend . Si vous utilisez implémente changez-le en étend et utilisez la solution d'Eduardo Copat.

c'est un fichier que je partage avec vous, exécutez-le tel quel. vous apprendrez comment appeler un super constructeur et comment appeler un 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");

    print("");

    var dog2 = Dog("Pug", "Brown");

    print("");

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