Flutter学习之Dart语言基础(构造函数)
最常见的构造函数形式,即生成构造函数,创建一个类的新实例: class Point {
num x, y; //Dart中int和double是num的子类 //this引用当前类对象
Point(num x, num y) {
this.x = x;
this.y = y;
}
} 使用语法糖的时候可以这样定义: class Point {
num x, y; //用于设置x和y的语法糖
//在构造函数体运行之前
Point(this.x, this.y); @override
String toString() {
return ("x: $x, y: $y");
}
} //print(new Point(100, 200)); -> 打印 x: 100, y: 200 默认构造函数 如果未声明构造函数,则会提供默认构造函数。 默认构造函数没有参数,并在调用父类无参数构造函数。 class Parent{
Parent(){
print('In Parent\'s constructor.');
}
} class Child extends Parent{
Child(){
print('In Child\'s constructor.');
}
} //new Child(); -> 打印 In Parent's constructor. In Child's constructor. 构造函数不能继承 子类不能继承其父类构造函数,一个没有声明构造函数的子类只有默认(无参数,无名称)构造函数
命名构造函数 当我们需要定义一个有特别含义的构造函数的时候,可以通过构造函数.XXX来命名构造函数 class Point{
num x;
num y; Point(this.x, this.y); //创建一个坐标原点类
Point.origin(){
this.x = ;
this.y = ;
} //创建一个坐标为(100, 100)的类
Point.coordinate100(){
this.x = ;
this.y = ;
}
@override
String toString() {
return ("x: $x, y: $y");
}
} 调用父类构造函数 默认情况下,子类中的构造函数调用父类的未命名无参数构造函数。 父类的构造函数在子类构造函数体的开头被调用。 如果还使用初始化了列表,则会在调用父类构造函数之前执行。 执行顺序如下: 初始化列表
父类的无参数构造函数
子类的无参数构造函数 如果父类没有未命名的无参数构造函数,则必须手动调用父类中的一个构造函数。 在子类的构造函数体之后用冒号(:)指定父类构造函数 例1:默认先调用父类的无参数构造函数 class Parent{
Parent(){
print('In Parent\'s constructor.');
}
} class Child extends Parent{
Child(num x, num y) {
print('In Child\'s constructor.');
}
} //new Child(100, 100); -> 打印
//In Parent's constructor.
//In Child's constructor. 例2:手动调用父类其他构造函数 class Parent{
num x;
num y;
Parent(this.x, this.y){
print('In Parent\'s constructor.');
}
} class Child extends Parent{
Child(num x, num y) : super(x, y){
print('In Child\'s constructor.');
}
} //new Child(100, 100); -> 打印
//In Parent's constructor.
//In Child's constructor. 关于初始化列表:
调用父类构造函数之前,可以在构造函数体执行之前初始化示例变量,用逗号分隔,该过程叫初始化列表。 class Parent{
num x;
num y;
num sum; Parent(num px, num py) : x = px, y = py, sum = px + py{
print("x: $x, y: $y, sum: $sum");
print('In Parent\'s constructor.');
}
} class Child extends Parent{
Child(num x, num y) : super(x, y){
print('In Child\'s constructor.');
}
} // new Child(100, 100); -> 打印
//x: 100, y: 100, sum: 200
//In Parent's constructor.
//In Child's constructor. 重定向构造函数 有时构造函数需要重定向到同一个类中的另一个构造函数,在冒号后面用this: class Point {
num x, y; //类的主构造函数
Point(this.x, this.y); //重定向到主构造函数
Point.alongXAxis(num x) : this(x, );
} 常量构造函数 如果你的类需要成为永远不会更改的对象,则可以使这些对象成为编译时常量。 定义const构造函数要确保所有实例变量都是final。 class Point {
final num x;
final num y;
static final Point2 origin = const Point2(, ); //const关键字放在构造函数名称之前,且不能有函数体
const Point2(this.x, this.y);
} 没有定义final时提示:
const-construcot.png 使用函数体时提示:
const-construcot.png
工厂构造函数 在实现不用总是创建新的类对象的时候,可以使用factory关键字。 例如,工厂构造函数可能从缓存中返回实例,或者它可能返回子类型的实例: class Logger {
final String name;
bool mute = false; //工厂构造函数无法访问this,所以这里要用static
//维护一个缓存的Map对象,
static final Map<String, Logger> _cache =
<String, Logger>{}; //调用该构造函数的时候,会从Map中取出对象
factory Logger(String name) {
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final logger = Logger._internal(name);
_cache[name] = logger;
return logger;
}
} Logger._internal(this.name); void log(String msg) {
if (!mute) print(msg);
}
} //调用
var logger = Logger('UI');
logger.log('Button clicked');
Flutter学习之Dart语言基础(构造函数)的更多相关文章
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- Flutter学习笔记--Dart基础
前言 Flutter使用Dart语言开发, Dart是面向对象编程语言, 由Google2011年推出, 目前最新版本是2.4.0. 工欲善其事,必先利其器. 为了更好的开发Flutter应用, 我们 ...
- Arduino学习笔记② Arduino语言基础
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ndk学习之C语言基础复习----虚拟内存布局与malloc申请
在这一次中来学习一下C语言的内存布局,了解它之后就可以解释为啥在用malloc()申请的内存之后需要用memset()来对内存进行一下初始化了,首先来了解一下物理内存与虚拟内存: 物理内存:通过物理内 ...
- GO学习-(20) Go语言基础之单元测试
Go语言基础之单元测试 不写测试的开发不是好程序员.我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分. 这篇文章主要介绍下在Go ...
- GO学习-(19) Go语言基础之网络编程
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...
- GO学习-(17) Go语言基础之反射
Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
随机推荐
- java中把文件拷贝到指定目录下最简单几种方法
java中把文件拷贝到指定目录下最简单几种方法 String savePath = "D:/file";// 文件保存到d盘的file目录下 File savefile = n ...
- Redis键通知机制
Redis键通知机制 一.概念 自从redis2.8.0以后出了一个新特性,Keyspace Notifications 称为“键空间通知”. 这个特性大概是,凡是实现了Redis的Pub/Sub的客 ...
- 数据结构与算法 Javascript描述
数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得
- Ehcache开启JMX支持
Ehcache提供了基于JMX的监控支持,支持对以下几类信息的监控. CacheManager Cache CacheConfiguration CacheStatistics 按照JMX的规范,为了 ...
- 【ARTS】01_31_左耳听风-201900610~201900616
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- spring mvc 后端获得前端传递过来的参数的方法
1.通过HttpServletRequest 获得 HttpServletRequest.getParameter(参数名),可以获得form表单中传递的参数,或ajax或url中传递过来的参数,如果 ...
- python lanbda匿名函数(20)
在python开发中常规的函数在调用之前都需要先声明,而python还有一种匿名函数,有速写函数的功能并且匿名函数不需要声明也没有函数名字,完全不需要担心函数名冲突,具体的妙用还需要从实战练习中多多积 ...
- 【基本优化实践】【1.6】在sql server修改且移动数据库文件位置
在master数据库中,SQL Server提供系统扩展的存储过程,其中有一些存储过程的命名以xp_开头,用于处理操作系统的文件. 一,判断文件是否存在 存储过程sys.xp_fileexist 用于 ...
- Oracle之配置节点间相互信任机制测试
更改一下,之前的都不对,现在来一版简单有效的ssh互信配置 例如我的是在配置rac,在grid用户下配置互信:建立好相应的文件 mkdir .ssh chmod -R 700 .ssh/ 使用ssh- ...
- CSV文件导入数据库和导出数据库
实例一: <?php $filename = 'test'; //导出文件 header("Content-type: application/vnd.ms-excel; charse ...