Dartの1つのクラスは複数のインタフェースとDartのMixinsを実現する

2101 ワード

1つのクラスが複数のインタフェースを実装
abstract class A{  //  A
  String name;
  printA();
}

abstract class B{  //  B
  printB();
}

class C implements A,B{  
  @override
  String name;  
  @override
  printA() {
    print('printA');
  }
  @override
  printB() {
    // TODO: implement printB
    return null;
  }
}


void main(){
  C c=new C();
  c.printA();
}

DartのMixins
mixinsの中国語は混入を意味し、クラスに他の機能を混入する.
Dartではmixinsを用いて同様のマルチ継承機能を実現できる
mixinsの使用条件のため、Dartバージョンが変わるにつれて、ここではDart 2について話しています.xでmixinsを使用する条件:
1、mixinsとしてのクラスはObjectからしか継承できない、他のクラスは継承できない2、mixinsとしてのクラスはコンストラクション関数があることができない3、1つのクラスはmixinsの複数のmixinsクラス4、mixinsは決して継承ではなく、インタフェースではなく、新しい特性である
ケース1
class A {
  String info="this is A";
  void printA(){
    print("A");
  }
}

class B {
  void printB(){
    print("B");
  }
}

class C with A,B{
  
}

void main(){
  var c=new C();  
  c.printA();
  c.printB();
  print(c.info);  //this is A
}

ケース2
class Person{
  String name;
  num age;
  Person(this.name,this.age);
  printInfo(){
    print('${this.name}----${this.age}');
  }
  void run(){
    print("Person Run");
  }
}

class A {
  String info="this is A";
  void printA(){
    print("A");
  }
  void run(){
    print("A Run");
  }
}

class B {  
  void printB(){
    print("B");
  }
  void run(){
    print("B Run");
  }
}

class C extends Person with B,A{
  C(String name, num age) : super(name, age);
  
}

void main(){  
  var c=new C('  ',20);  
  c.printInfo();
  // c.printB();
  // print(c.info);

   c.run();
}

Mixinsのタイプ
mixinsのタイプはそのスーパークラスのサブタイプです.
class A {
  String info="this is A";
  void printA(){
    print("A");
  }
}

class B {
  void printB(){
    print("B");
  }
}

class C with A,B{
  
}

void main(){  
   var c=new C();  
   
  print(c is C);    //true
  print(c is A);    //true
  print(c is B);   //true


  // var a=new A();

  // print(a is Object);  //true
}