Flutter开发-Dart语言基础-3

群组
欢迎加入群组,闲聊工作&技术&问题等

接着上篇,这节继续Dart基础语法.

        类是一个实例的抽象,通过类来创建实例,创建实例的过程叫做初始化.

构造函数

        Dart中的基本构造函数是通过编写一个和类同名的方法实现:

class Car extends Object {
// 构造函数
  Car(double color, int price) {
  }
}

也可以通过简写来创建构造函数:

class Car extends Object {
  // 构造函数
  // Car(double color, int price) {
  // }

  Car(double color, int price);
}

便利构造器

遍历构造器是类构造函数的一种方式.

class Car extends Object {
  // 构造函数
  // Car(double color, int price) {
  // }

  Car(double color, int price);
  // 便利构造器
  Car.init(double height, double width) {
    print("car height:$height, car width:$width");
  }
}
  Car.init(12.0,2.0);

属性变量

        其他语言像Swift,Python等都有属性变量,其实这是成员变量的另一种写法,Dart同样也有属性变量:

class Car extends Object {
  double color;
  int price;
  // 构造函数
  // Car(double color, int price) {
  // }

  Car(double color, int price) {
    this.color = color;
    this.price = price;
  }

  // 便利构造器
  Car.init(double height, double width) {
    print("car height:$height, car width:$width");
  }
}

        我们在类中调用成员变量的时候可以通过this指针来调用,有点类似JavaScript.如果我们想设置只读属性,可以用final关键字修饰属性,之前已经提到过了.

实例方法和类方法

        类方法是通过类名直接调用方法,定义的时候需要static关键字修饰:

static int newPrice = 10;
// 类方法
static int getPrice() {
  print("price:$newPrice");
  return 10;
}

Car.getPrice();

类方法中只能调用static修饰的静态变量.

实例方法通过实例对象来调用:

// 实例方法
double getHeight() {
  return this.height;
}

存取方法

        Dart中可以重写属性变量的setter和getter方法:

int get totalPrice => this.price * 2;
set totalPrice(int value) => price + value;

类的继承

        在Dart中类和接口是统一的,类也是一个接口.类可以被重写,也可以被实现.抽象类更像一个接口文件,其定义待实现的方法和变量等.

抽象类(接口)

        Dart中的抽象类更像Swift中的protocol,可以通过抽象类实现多继承:

// 汽车价格接口文件
abstract class PriceInterface {
  // 获取汽车价格方法声明
  int carPrice();
}

// 汽车颜色接口文件
abstract class ColorInterface {
  // 获取汽车颜色
  double carColor();
}

继承

        在Dart也有一个超类Obejct,任何类都继承自这个类.Dart中支持单继承,多继承可以通过接口文件实现(抽象类),继承使用Extends关键字,实现多继承通过implements关键字.如果类中的方法被重写了,在方法的上面会添加@override关键字;

        单继承一个类,继承某个类不必须实现父类中的所有方法:

class Father extends Object {
  Father() {
    print("this is father");
  }

  void name() {
    print("father name");
  }
}

class Son extends Father {
  Son() {
    print("this is son");
  }

  @override
  void name() {
  // TODO: implement name
    super.name();
    print("son name");
  }
}

        实现某个接口或者类必须实现接口或类中所有的方法:

多继承多个接口:

// mini cooper
class MiniCooper implements PriceInterface, ColorInterface {
  int price;
  double color;
  // 构造函数
  MiniCooper(int price, double color){
    this.price = price;
    this.color = color;
  }

  @override
  int carPrice() {
    // TODO: implement carPrice
    return 20;
  }

  @override
  double carColor() {
    // TODO: implement carColor
    return 20.0;
  }
}

单个类的实现:

class grandSon implements Son {
  @override
  void name() {
    // TODO: implement name
  }
}

泛型

        泛型指的是编译期不知道对象的具体类型,对象的类型在运行时期确定.

class BBQ<T> extends Object {
  BBQ(T value) {
    print("value:$value, value type: ${value.runtimeType}");
  }
}

BBQ bbq = BBQ("bbq");
I/flutter (29031): value:bbq, value type: String

包管理器

        Dart使用Pub来管理包,pub官网其配置文件是pubspec.yaml,如果你想添加其他第三方依赖,直接将依赖配置添加到这个文件中:

## http请求库
dependencies:
flutter:
  sdk: flutter
  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2

  # http 请求库
  http: ^0.12.0+2

pub

然后执行如下命令下载更新依赖:

flutter pub get

导入包

import 'package:http/http.dart' as http;

 上一篇
Flutter开发-Demo项目结构解读 Flutter开发-Demo项目结构解读
群组欢迎加入群组,闲聊工作&技术&问题等         当我们用Flutter创建一个空的demo的时候,Flutter会为我们创建一个计数
2019-06-13
下一篇 
Flutter开发-Dart语言基础-2 Flutter开发-Dart语言基础-2
群组欢迎加入群组,闲聊工作&技术&问题等 接着上篇Dart语言基础. 运算符Dart和其他语言一样多种,支持多种运算. 点运算语法糖       &nb
2019-06-12
  目录