前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart 知识点 - 抽象类和接口

Dart 知识点 - 抽象类和接口

作者头像
Jimmy_is_jimmy
发布2022-09-20 15:19:44
2840
发布2022-09-20 15:19:44
举报
文章被收录于专栏:call_me_R

推荐使用线上编辑器 dartpad.cn 进行学习,测试~

抽象类

抽象类用于描述父类拥有的一种行为,但是无法给出细节实现,需要子类来实现抽象的细节。可以简单理解抽象类就是伪代码

抽象类一般会被定义为父类,给子类继承

抽象类的定义格式

格式如下:

代码语言:javascript
复制
abstract class className {
  // 成员变量
  [static][const][final] type name;
  
  // 成员方法
  [type] methodName(paramType: paramName ...);
}

相关的字段说明,我们已经在之前的文章讲过。不熟悉的读者,可以进入文章 Dart 知识点 - 面向对象基础学习,这里不再赘述。

应用例子

我们定义一个抽象类 Shape,然后定义正方形 Square 类来继承抽象类并重写抽象类的方法。如下:

代码语言:javascript
复制
void main() {
  Square square = new Square(10, 20);
  var area = square.area();
  print('Area is ${area}.'); // Area is 200.
}

abstract class Shape {
  double width = 0.0;
  
  double height = 0.0;
  
  double area();
}

class Square extends Shape {
  Square(double width, double height) {
    this.width = width;
    this.height = height;
  }
  
  @override
  double area() {
    return super.width * super.height;
  }
}

接口

Dart 的接口没有用 interface 关键字定义接口,而是普通类或抽象类都可以作为接口被实现。

  • 如果实现的类是普通类,需要将普通类和抽象类中的方法和属性全部重写一遍。

Dart 中只允许继承一个类,但是可以实现多个接口。

我们案例走一遍,如下:

代码语言:javascript
复制
void main() {
  Dog dog = new Dog();
  
  dog.display(); // Animal name: Jimmy
  
  dog.walk(); // I can walk.

}

// 抽象类 Animal
abstract class Animal {
  String name = 'Jimmy';
  
  void display() {
    print('Animal name: ${name}');
  }
  
  void eat();
}

// 抽象类作为接口
abstract class SwimAbility {
  bool canSwim = false;
  void swim();
}

// 普通类作为接口
class WalkAbility {
  void walk() {}
}

class Dog extends Animal implements SwimAbility, WalkAbility {
  
  bool canSwim = true; // 声明接口中的属性
  
  // 重写吃东西的方法
  @override
  void eat() {
    
  }
  
  // 重写游泳的方法
  @override
  void swim() {
    
  }
  
  // 重写散步的方法
  @override
  void walk() {
    print('I can walk.');
  }
}

如何区分抽象类和接口

抽象类和接口如何区分?

  • 通过字面意思上区分(非严谨,看个人写代码的习惯),比如:
代码语言:javascript
复制
// 抽象类
abstract class Animal {
}

// 抽象类作为接口
abstract class SwimAbility {
}

// 普通类作为接口
class WalkAbility {
}
  • 通过子类中继承和接口的关键字来区别,比如:
代码语言:javascript
复制
// extends 后面跟的是父类,implements 后面跟的是接口
class Dog extends Animal implements SwimAbility, WalkAbility {
}

往期精彩推荐

如果读者觉得文章还可以,不防一键三连:关注➕点赞➕收藏

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抽象类
  • 接口
  • 如何区分抽象类和接口
  • 往期精彩推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档