Dart abstract class mixin 究竟哪里不一样呢?

本文探讨了Dart中abstract class与mixin的区别。当abstract class被另一个abstract class继承时,继承者需实现父类构造函数。而被Class extends时,会自动生成abstract构造方法,但implements时不提供。abstract class不需要实现默认方法,而implements则必须。mixin没有构造函数,不能被实例化,作为接口使用,类混入mixin后需要实现相关方法,且默认方法无需实现。
摘要由CSDN通过智能技术生成

}

abstract class Student extends Person {

Student(String name) : super(name);

int age;

study() {

print(“学习”);

}

hasClass();

}

class Child implements Student {

@override

int age;

@override

hasClass() {

// TODO: implement hasClass

throw UnimplementedError();

}

@override

// TODO: implement name

String get name => throw UnimplementedError();

@override

run() {

// TODO: implement run

throw UnimplementedError();

}

@override

study() {

// TODO: implement study

throw UnimplementedError();

}

@override

talk() {

// TODO: implement talk

throw UnimplementedError();

}

}

总结:abstract class被abstract class继承,继承需要实现父类构造函数。

[](()2.3、abstract class 被Class extends和implements的区别

abstract class Person {

Person(this.name);

final String name;

talk();

run() {

print(“奔跑”);

}

}

class Man extends Person {

Man(String name) : super(name);

@override

talk() {

print(“man talk”);

}

}

class Woman implements Person {

@override

String get name => “女神”;

@override

run() {

print(“女神跑步”);

}

@override

talk() {

print(“女神说话”);

}

}

上面例子,Man 类继承Person 抽象类,Woman 类实现Person抽象类,可以看出区别如下:

  1. 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 extends 自动生成abstract 的构造方法,implements则不会

  2. extends 不需要实现属性可以直接利用父类, implements需要实现。

  3. extends 不需要实现默认方法可以直接利用,implements需要实现。(重要)

  4. 接口定义方法 extends和implements都需要实现。

[](()3. class


Dart的Class特点: 可以当做抽象接口类被实现

代码例子:

class Person {

final String name;

Person(this.name);

talk() {

print(“person talk”);

}

run() {

print(“person run”);

}

}

class Woman implements Person {

@override

// TODO: implement name

String get name => throw UnimplementedError();

@override

run() {

// TODO: implement run

throw UnimplementedError();

}

@override

talk() {

// TODO: implement talk

throw UnimplementedError();

}

}

[](()4. mixin


通过创建一个继承自 Object 且没有构造函数的类,来 实现 一个 Mixin 。 如果 Mixin 不希望作为常规类被使用,使用关键字 mixin 替换 class 。

  1. mixin 没有构造函数,不能被实例化

  2. 可以当做接口使用,class 混入之后需要实现

  3. 默认方法不需要实现(这个是和abstract 的区别)

  4. 如果一个类with,方法相同,先执行本体方法,然后按照混入顺序,执行最后mixin方法。

  5. 可以使用on 指定混入的类类型,如果不是报错。

代码演示:

main(List args) {

final man = Man(“男神”);

man.classes();

man.study();

}

class Person {

final String name;

Person(this.name);

talk() {

print(“person talk”);

}

run() {

print(“person run”);

}

}

class Man extends Person with Student {

Man(String name) : super(name);

@override

study() {

print(“man study”);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值