Dart 类

类属性

基于Dart的所有变量均是对象的原则,建议所有的变量初始化加上空安全

Dart对象的属性如果没有限制空安全,则必须在初始化时赋值。

class Car {
    String? name;//空安全
    Double price = 0.0;//初始化
}

方法

Dart支持胖箭头函数:=>,但是仅限表达式(即一句程序解决问题)👇

sum(a,b)=> a+b;//表达式
bigger(a,b) => a>b?a:b;//表达式

同一域内,不允许存在同名方法

构造器

与Java不同,Dart的构造器不允许重载!只能用命名构造函数,比如.Init,.create等(命名不固定,全凭自己定义)

class User{
    String? name;
    User(){}
    User.Init(String name){
        this.name = name;
    }
}

//调用
var jack = User();
var bob = User.Init('bob');

Dart为类的构造器提供了一个语法糖——构造器后用:提前执行一些处理工作,但是运用这种语法糖有个前提——处理必须处理所有的非空类属性,比如:

class User{
    String name;// 非空的类属性
    User.Init(String name):this.name = name.trim(){}
}

普通类方法

与Java不同,Dart方法不支持重载!比如下面写法就是错误的!

class Calculate{
  add(int val_1, int val_2) => val_1 + val_2;
  add(int val_1, int val_2,int val_3) => val1 + val2 + val_3;
}

同一类中必须唯一命名Dart的方法

get / set 方法

针对属性的get/set,Dart提供了一套语法模板👇

class Space {
  String _name = '';
  // 一定要写返回类型!返回类型可以不是原类型
  String get name {
    return _name;
  }

  set name(String name) {
    this._name = name;
  }
}

如果get方法里对于数据没有特殊校验,可以直接写为箭头函数

class Space {
  String _name = '';
  String get name => _name;
}

抽象类

abstract修饰的类;只有抽象类中才可定义抽象方法。

abstract class Animal {
  String name;//抽象类属性
  Animal({required this.name});//构造方法(后面讲)
  void eat();//抽象方法
}

继承

和Java一样,Dart只允许继承一个父类!

/// 父类
abstract class Animal {
    String name;
    Animal({this.name});
    void eat();
}

/// 子类
import 'Animal.dart';
/// 继承Animal父类
class Cat extends Animal {
  Cat({required super.name});// 构造方法
  @override
  void eat() {
    print('$name 吃鱼');
  }
}

接口

Dart中没有interface关键字,接口使用class定义,实现接口使用implements关键字;建议接口使用抽象类

/// 接口类
abstract class Actions {
  void run();
}
/// Cat实现Actions接口
import 'Animal.dart';
import 'Actions.dart';
class Cat extends Animal implements Actions {
  Cat({required super.name});// 构造方法
  @override
  void eat() {
    print('$name 吃鱼');
  }
  /// 实现接口方法
  @override
  void run() {
    print('$name 悄悄跑');
  }
}
posted @ 2023-03-14 16:02  勤匠  阅读(21)  评论(0编辑  收藏  举报