写点什么

Dart9

  • 2022 年 5 月 06 日
  • 本文字数:1992 字

    阅读完需:约 7 分钟

var cf = new ClassFunction();


var out = cf("dongnao","flutter,","damon");


print('$out'); // 输出 dongnao flutter, damon!


print(cf.runtimeType); // 输出 ClassFunction


print(out.runtimeType); // 输出 String


print(cf is Function); // 输出 false


//重载操作符


final v1 = Vector(2, 3);


final v2 = Vector(2, 2);


final r1 = v1 + v2;


final r2 = v1 - v2;


print([r1.x, r1.y]); //输出 [4, 5]


print([r2.x, r2.y]); //输出 [0, 1]


}


class Point {


num x;


num y;


var distanceFromOrigin;


//普通构造函数


// Point(num x, num y){


// this.x = x;


// this.y = y;


// }


//简化构造


// Point(this.x, this.y);


//命名构造函数


Point.fromJson(Map json) {


x = json['x'];


y = json['y'];


}


//重定向构造函数 使用冒号调用其他构造函数


Point.alongXAxis(num x) : this(x, 0);


//初始化列表


Point(this.x, this.y) : distanceFromOrigin = sqrt(x * x + y * y);


@override


String toString() {


// TODO: implement toString


return 'Point(x = y)';


}


}


class Parent {


int x;


int y;


//超类命名构造函数不会传递,如果希望使用超类中定义的命名构造函数创建子类,则必须在子类中实现该构造函数


Parent.fromJson(x, y)


: x = x,


y = y {


print('超类命名构造函数');


}


}


class Child extends Parent {


int x;


int y;


//如果超类没有默认构造函数, 则你需要手动的调用超类的其他构造函数


Child(x, y) : super.fromJson(x, y) {


//调用超类构造函数的参数无法访问 this


print('子类构造函数');


}


//在构造函数的初始化列表中使用 s 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 uper(),需要把它放到最后


Child.fromJson(x, y)


: x = x,


y = y,


super.fromJson(x, y) {


print('子类命名构造函数');


}


}


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 = y)';


}


}


class Singleton {


String name;


static Singleton _cache; //工厂构造函数无法访问 this。所以这里要静态的


//工厂构造函数,关键字 factory


//工厂构造函数是一种构造函数,与普通构造函数不同,工厂函数不会自动生成实例,而是通过代码来决定返回的实例对象.


// factory Singleton([String name = 'singleton']) {


if(Singleton._cache == null){


Singleton._cache=new Singleton._newObject(name);


}


return Singleton._cache;


//


// return Singleton._cache ??= Singleton._newObject(name);


// }


factory Singleton([String name = 'singleton']) =>


Singleton._cache ??= Singleton._newObject(name);


//定义一个命名构造函数用来生产实例


Singleton._newObject(this.name);


}


//工厂函数


class Massage {


void doMassage(){


print('按摩');


}


}


class FootMassage extends Massage {


@override


doMassage() {


print('脚底按摩');


}


}


class BodyMassage extends Massage {


@override


void doMassage() {


print('全身按摩');


}


}


class SpecialMassage extends Massage {


@override


void doMassage() {


print('特殊按摩');


}


}


Massage massageFactory(String type){


switch (type) {


case 'foot':


return new FootMassage();


case 'body':


return new BodyMassage();


default:


return new SpecialMassage();


}


}


//工厂模式


//abstract class Massage {


// factory Massage(String type) {


// switch (type) {


// case 'foot':


// return new FootMassage();


// case 'body':


// return new BodyMassage();


// default:


// return new SpecialMassage();


// }


// }


//


// void doMassage();


//}


//


//class FootMassage implements Massage {


// @override


// doMassage() {


// print('脚底按摩');


// }


//}


//


//class BodyMassage implements Massage {


// @override


// void doMassage() {


// print('全身按摩');


// }


//}


//


//class SpecialMassage implements Massage {


// @override


// void doMassage() {


// print('特殊按摩');


// }


//}


//setter getter


//每个实例变量都隐含的具有一个 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);


// getter 和 setter 的好处是,可以开始使用实例变量,后面可以把实例变量用函数包裹起来,而调用你代码的地方不需要修改。


//获取 right 值


num get right => left + width;


//设置 right 值,同时 left 也发生变化

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Dart9_Java_爱好编程进阶_InfoQ写作社区