3.1 类的基础 – 《简单易懂的Dart》

3.1.1 面向对象

Dart是一个面向对象的语言,所有的内容都与对象有关,包括我们之前学习的变量,函数,类型,其实都是对象.

JavaScript的面向对象一直受非专业人士诟病(但是非常好玩!),所以Dart在设计时让面向对象机制和C++等语言较为相似,方便学习.

说到面向对象,就不得不提到”class”,也就是”类”,传统的面向对象是基于类实现的.

3.X的章节我们将好好的学习关于Dart的面向对象.

3.1.2 定义类

定义类需要使用到关键字class,格式如下:

class 类名{  
  类的成员
}

一个最简单的类是这样的:

class A{}  

注意:A后面的{}不可省略.

3.1.3 定义类的成员

在类中定义成员变量非常简单,只需要使用声明变量的方式即可完成.

下面我们定义一个”人”类,这个类包含这个”人”的姓名,年龄等信息.

class Person{  
  String firstName,lastName;
  int age;
}

是不是非常简单呢?

同样的,定义类的成员方法,也不是一件难事.像往常一样使用函数的写法就可以了.

另外,使用this指针可以对实例中的成员进行访问,如果没有命名冲突,甚至可以省略this.

像这样:

class Person{  
  String firstName,lastName;
  int age;

  String getFullName(){
    return '${this.firstName} ${this.lastName}';
  }
}

注意:其中涉及到了字符串的相关知识,我会在另一篇文章中进行补充.

3.1.4 类的实例化

将类实例化很容易,使用new关键字就可以完成.

格式如下:

类 变量名=new 类(初始化参数);

实例化后的类可以使用.运算符访问其成员.

我们试试将上面写的Person类实例化吧.

class Person{  
  String firstName,lastName;
  int age;

  String getFullName(){
    return '${this.firstName} ${this.lastName}';
  }
}
void main(){  
  Person mercer=new Person();
  mercer.firstName='Alex';
  mercer.lastName='Mercer';
  mercer.age=29;
  print(mercer.getFullName());
}

按下Ctrl+R,运行程序,输出

Alex Mercer  

嗯,这是我们第一次在Dart中使用class.

3.1.5 构造函数

也许你对实例化后再赋值属性比较厌恶(大多数人都这样),所以构造函数很重要,更重要的是构造函数可以帮你进行初始化操作.

Dart类中的构造函数是与类同名的方法,需要注意的是构造函数不能有返回值类型.

具体含义相信你看了下面这个例子就会明白.

class Person{  
  String firstName,lastName;
  int age;

  Person(firstName,lastName,age){
    this.firstName=firstName;
    this.lastName=lastName;
    this.age=age;
  }

  String getFullName(){
    return '${firstName} ${lastName}';
  }
}

在这个例子中,Person方法与类同名,所以它是Person类的构造函数.

接下来实例化Person类.

void main(){  
  Person mercer=new Person('Alex','Mercer',29);
  print(mercer.getFullName());
}

是不是变得清爽多了?

3.1.6 简单的构造函数

实际上,Dart的构造函数还有一种简单的写法,尤其是当你只需要简单的初始化成员属性的时候格外方便.

3.1.5节中的Person方法可以这样写:

Person(this.firstName,this.lastName,this.age);  

Dart会自动将3个参数赋值给对应的成员,这个特性相当好用.