Dartの1つのクラスは複数のインタフェースとDartのMixinsを実現する
2101 ワード
1つのクラスが複数のインタフェースを実装
DartのMixins
mixinsの中国語は混入を意味し、クラスに他の機能を混入する.
Dartではmixinsを用いて同様のマルチ継承機能を実現できる
mixinsの使用条件のため、Dartバージョンが変わるにつれて、ここではDart 2について話しています.xでmixinsを使用する条件:
1、mixinsとしてのクラスはObjectからしか継承できない、他のクラスは継承できない2、mixinsとしてのクラスはコンストラクション関数があることができない3、1つのクラスはmixinsの複数のmixinsクラス4、mixinsは決して継承ではなく、インタフェースではなく、新しい特性である
ケース1
ケース2
Mixinsのタイプ
mixinsのタイプはそのスーパークラスのサブタイプです.
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
}