Flutter开发指南之理论篇:Dart语法03(类,泛型)

本文是Flutter开发指南的理论篇,深入讲解Dart语言的类和泛型。介绍了类的定义、构造函数、抽象类与隐式接口、继承与Mixin,以及枚举类。同时,探讨了泛型类和泛型函数的应用,帮助开发者更好地理解和使用Dart进行移动应用开发。
摘要由CSDN通过智能技术生成

总目录

Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)
Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)
Flutter开发指南之理论篇:Dart语法03(类,泛型)
Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)


 Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:

  • 一切皆对象!无论是数字,函数还是null,所有对象继承自Object类;
  • 声明一个变量时可以不指定具体类型,Dart可以自动推断类型;
  • Dart支持顶层函数,函数是一等对象,且函数可作为参数传递;
  • Dart使用_开头表示私有属性,没有关键字publicprotectedprivate

1. 类

1.1 类的定义

 Dart是一种基于类mixin继承机制的面向对象的语言,每个对象都是一个类的实例,所有的类都继承于 Object。基于Mixin继承意味着每个类(除Object外)都只有一个超类,一个类中的代码可以在其他多个继承类中重复使用。定义一个类大体形式如下:

class 类名 {
   
    // 成员变量
    类型 变量名;

    // 构造函数(方法)
    类名([参数1,..]) {
   
        
    }
    
    // 成员函数(方法)
    类型 方法名([参数1,...]) {
   
        
    }
}

 从类定义可知,Dart中的类创建形式同Java一致。

1.1.1 构造函数

 构造函数主要用于创建一个类的对象(实例),通常使用new关键字实现,但是在Dart中该关键字可以省略。在没有声明构造函数的情况下,Dart会提供一个默认的构造函数,并且默认构造函数没有参数,会自动调用父类的无参构造函数。需要注意的是,子类不会继承父类的构造函数。举个例子:


class PersonalInfoBean {
   
    // 成员变量
    // 当声明时没有初始化,Dart会自动设置其初始值为null
    String name;
    num age;  
    var sex = 'male';
    
    // 构造函数(带参数)
    // this关键字可省略
    PersonalInfoBean(String name, num age, var sex) {
   
        this.name = name;
        this.age = age;
        this.sex = sex
    }
    
    // 【dart语法糖】
    // 精简构造函数,因此上述构造函数等价于
    // PersonalInfoBean(this.name, this.age, this.sex);
}

 需要注意的是,dart中所有实例变量都生成隐式getter方法,非final的实例变量同样会生成隐式setter方法。因此,在调用类对象的成员变量时,最终会调用变量的getter或setter方法获取更新值。特别的,dart支持使用使用 ?. 来代替.访问类对象的成员,可以避免因为左边对象可能为null,进而导致的异常。

// 使用无参构造函数
val personalInfo = PersonalInfoBean();

print('name = ${
     personalInfo.name}'); // 打印 "name = null"
print('name = ${
     personalInfo.sex}'); // 打印 "name = male"

personalInfo.name = 'jiangdg';
print('name = ${
     personalInfo.name}'); // 打印 "name = jiangdg"

// 使用有参构造函数
val personalInfo2 = PersonalInfoBean('JJ', 45, 'female');
print('name = ${
     personalInfo.name}'); // 打印 "name = JJ"
print('name = ${
     personalInfo.sex}'); // 打印 "name = 45"

 除了常规方式,Dart还支持几种特殊的构造函数:

  • 命名构造函数

 使用命名构造函数可为一个类实现多个构造函数,也可以使用命名构造函数来更清晰的表明函数意图。注意,由于构造函数不能被继承,这就意味着命名构造函数不会被子类继承,如果希望使用父类中定义的命名构造函数创建子类,就必须在子类中实现(重写)该构造函数。示例如下:

class Point {
   
  // dart使用_表示私有属性
  num _x, _y;

  Point(this.x, this.y);

  // 命名构造函数
  Point.origin() {
   
    x = 0;
    y = 0;
  }
}

// 使用命名构造函数
// 实例化一个对象
val originPoint = Point.origin();
print('x = ${
     originPoint.x}'); // 打印 "x = 0"
print('y = ${
     originPoint.y}')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值