Dart和Java语言一样一切皆对象,每个对象都是一个类实例,所有的类都直接或者借接继承Object类。
Dart同样具有面向对象的语言的:封装、继承、多态的基本特点;
Dart语言和Java语言中共同点是都是单继承;
Dart中任何一个可以用变量引用的都是一个对象,在 Dart 中 甚至连 数字、函数和 null 都是对象。Dart中所有的对象都继承了Object 类。
所以学习Dart语言自然是从Object类开始。
一、Dart语言中的Object类,源码
class Object {
const Object();
external bool operator ==(other);
external int get hashCode;
external String toString();
@pragma("vm:entry-point")
external dynamic noSuchMethod(Invocation invocation);
external Type get runtimeType;
}
二、Object 类中的各个函数认识
1.const Object()函数
Dartu 语言中一切皆对象,函数也是对象。每个对象都有自己的类型,函数的类型是Function
很显然就是在Object中已经定义了构造函数,而且是由const 修饰的表示构造函数不可重载;即在子类中能有一个构造函数。
- Dart 语言中通过函数的可选参数[支持选择参数位置也可选择是否传参]、默认参数值等来实现/解决其他语言中的函数重载的需求。
- Dart语言中借助@required注解表示必传参数, @required需要引入包 package:meta/meta.dart,如果是用flutter,则可以引入包package:flutter/material.dart
- Dart中同样main函数为入口,而且所有函数都有返回值,如果代码中没有返回值,dart语言会默认在最后添加隐士return null 语句
例:下图中重载构造函数时无论有参和无参构造先后顺序,IDEL【AndroidStudio】工具都会自动检测到错误;
![]() |
![]() |
Dart中 final const修饰 常量/固定值 的几个基本特点
如果你以后不打算修改一个变量,使用 final 或者 const。
一个 final 变量只能赋值一次,即定义final变量时就要赋值, 一旦赋值,就不能改变final变量的值;
const 变量同时也是 final 变量
const 变量是编译时常量【必须根据可在编译时计算的数据创建它们】, 即const可以修饰 一个四则运算算术表达式,也可以是Map、List等编译时可以确定值的对象;
const 修饰的数组、Map、List等变量数据被修饰的数据结构中的数据也默认递归被const修饰,即变量对象的结构和值不能被修改;
其他关于final const 可参类型考Const, Static, Final
注意: 实例变量可以为 final 但是不能是 const 。
2. external bool operator ==(other);函数
第一次看到这个函数和注释虽然很快知道这个函数和Java中的函数 public boolean equals(Object obj)函数一样都 是判断连个对象是否相同,区别是Java中已经默认实现函数是直接对比对象的指针【子类没有重写情况下】,而Dart是直接用external修饰把比较方法留给子类自己定义;
有趣的是在Dart中 == 函数调用时:
TestObject test = TestObject();
TestObject test1 = TestObject();
print("${test == test1}");
实际调用是调用test对象的==函数test1作为参数;这个也正是operator 关键字的作用;