dart 语法的 构造函数生成 继承 实现 泛型 导包方式java
//普通构造函数
class Point {
num x;
num y;
Point(num x, num y){
this.x = x;
this.y = y;
}
}
复制代码
class Point {
num x;
num y;
//简化构造
Point(this.x, this.y);
}
复制代码
class Point {
num x;
num y;
//命名构造函数
Point.fromJson(Map json) {
x = json['x'];
y = json['y'];
}
}
复制代码
class Point {
num x;
num y;
Point(this.x, this.y);
//重定向构造函数 使用冒号调用其余构造函数
Point.alongXAxis(num x) : this(x, 0);
}
复制代码
class Parent {
int x;
int y;
//超类命名构造函数不会传递,若是但愿使用超类中定义的命名构造函数建立子类,则必须在子类中实现该构造函数
Parent.fromJson(x, y)
: x = x,
y = y {
}
}
class Child extends Parent {
int x;
int y;
//若是超类没有默认构造函数, 则你须要手动的调用超类的其余构造函数
Child(x, y) : super.fromJson(x, y) {
//调用超类构造函数的参数没法访问 this
}
//在构造函数的初始化列表中使用 super(),须要把它放到最后
Child.fromJson(x, y)
: x = x,
y = y,
super.fromJson(x, y) {
}
}
复制代码
用const 建立的对象 为同一个对象 var p2 = const Point2(4, 4);//常量对象 var p21 = Point2(4, 4); //建立的是非 常量对象
json
class Point2 {
//定义const构造函数要确保全部实例变量都是final
final num x;
final num y;
static final Point2 origin = const Point2(0, 0);
//const关键字放在构造函数名称以前,不能有函数体
const Point2(this.x, this.y);
@override
String toString() {
return 'Point2(x = $x, y = $y)';
}
}
复制代码
class Singleton {
String name;
static Singleton _cache; //工厂构造函数没法访问 this。因此这里要静态的
//工厂构造函数,关键字factory
//工厂构造函数是一种构造函数,与普通构造函数不一样,工厂函数不会自动生成实例,而是经过代码来决定返回的实例对象.
factory Singleton([String name = 'singleton']) => Singleton._cache ??= Singleton._newObject(name);
//定义一个命名构造函数用来生产实例
Singleton._newObject(this.name);
}
复制代码
每一个实例变量都隐含的具备一个 getter, 若是变量不是 final 的则还有一个 setter,能够经过实行 getter 和 setter 来建立新的属性, 使用 get 和 set 关键字定义 getter 和 setter安全
class Rectangle {
num left;
num top;
num width;
num height;
Rectangle(this.left, this.top, this.width, this.height);
//获取right值
num get right => left + width;
//设置right值,同时left也发生变化
set right(num value) => left = value - width;
//获取bottom值
num get bottom => top + height;
//设置bottom值,同时top也发生变化
set bottom(num value) => top = value - height;
}
复制代码
能够对对象进行比较 + - * / > <bash
//重载操做符
class Vector {
final int x;
final int y;
const Vector(this.x, this.y);
//重载+
Vector operator +(Vector v) {
return new Vector(x + v.x, y + v.y);
}
//重载-
Vector operator -(Vector v) {
return new Vector(x - v.x, y - v.y);
}
}
复制代码
使用方式ide
//重载操做符
final v1 = Vector(2, 3);
final v2 = Vector(2, 2);
final r1 = v1 + v2;
final r2 = v1 - v2;
print([r1.x, r1.y]);
print([r2.x, r2.y]);
复制代码
java 不能够多继承在dart中 with 来实现多继承函数
class Car extends Transportation
with
FourWheelTransportation,
MiddleSafetyIndex,
GasolineEnergyTransportation {
@override
void transport() {
print(
"汽车:\n动力组件: ${powerUnit()} , 安全指数: ${safetyIndex()} , 动力来源:${energy()}");
}
复制代码
//构造函数泛型
class Phone<T> {
final T mobileNumber;
Phone(this.mobileNumber);
}
复制代码
//泛型函数
K addCache<K, V>(K key, V value) {
K temp = key;
print('${key}: ${value}');
return temp;
}
复制代码
//泛型限制
class Massage<T extends FootMassage > {
final T massage;
Massage(this.massage);
}
复制代码
import 'dart:math'; //载入核心库
import 'package:dio/dio.dart'; //载入第三方库
import 'mylib1.dart' as lib1; //载入文件
import 'mylib2.dart' as lib2; //若是两个库有冲突的标识符,能够为其中一个或两个库都指定前缀
import 'mylib1.dart' as lib1 show Test; //只载入库的某些部分
import 'mylib2.dart' as lib2 hide Test; //筛选掉库的某些部分
import 'mylib1.dart' deferred as lazyLib; //延迟载入
import 'mylib/mylib.dart';//载入自定义库****
//组合导入
library material;
export 'ScreenAdapter.dart';
export 'AutoSizeConfig.dart';
复制代码