Dart语言入门——Object变量声明
Dart是一种面向对象的变成语言,Object是所有类的基类,包括基本数据类型、Function和Null。所以任何类型的数据都可以赋值给Object声明的对象。
先声明对象未马上赋值的情况
void main() {
Object obj;
obj = '野猿新一';
print(obj);
obj = 100;
print(obj);
obj= 6.66;
print(obj);
obj = true;
print(obj);
}
声明对象马上赋值的情况
void main() {
Object obj = '野猿新一';
print(obj);
obj = 100;
print(obj);
obj= 6.66;
print(obj);
obj = true;
print(obj);
}
如上两种情况,输出结果一样,如下
野猿新一
100
6.66
true
虽然Object和dynamic声明的变量一样,可以赋任何类型的数据,但是还是有区别的,dynamic是一个关键字,表示声明的变量是动态类型的,所以可以赋值任何类型的数据。但是Object声明的对象其实是已经固定的,就是Object类型,但是因为Object是所有类型的基类,所以也可以赋值任何类型数据(其实是面向对象编程里的多态,父类可以接受任何类型的子类实例)。但是有一点区别是由于Object声明的对象是Object类型,所以只能使用Object类的变量和方法。
比如Object声明的对象,赋值一个String类型数据,但是其类型还是Object,并无法调用String类型的length方法
而用dynamic声明的动态类型变量就可以使用length,因为其类型是根据赋值的值的类型而变的
以下代码无法正常变回,会报错
void main() {
Object obj = '野猿新一';
print(obj.length);
}
Error compiling to JavaScript:
main.dart:3:13:
Error: The getter 'length' isn't defined for the class 'Object'.
- 'Object' is from 'dart:core'.
print(obj.length);
^^^^^^
Error: Compilation failed.
而dynamic声明的对象可以正常运行,运行结果为4
void main() {
dynamic dyn = '野猿新一';
print(dyn.length);
}