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);
}

 

posted @ 2019-10-16 10:42  野猿新一  阅读(94)  评论(0编辑  收藏  举报