Dart 类定义

Dart 类定义,在Dart中使用关键字class定义类,这与Java类似。

构造函数

在Dart中定义一个class和在Java中基本一样,如下所示:

class Person {
  String name;
  String sex;

  Person(String name, String sex) {
this.name = name;
this.sex = sex;
  }
}

Dart中有一种简单的写法,如下所示:

class Person {
  String name;
  String sex;
  Person(this.name, this.sex);
}

当不需要在构造函数中做特殊处理的时候,建议使用这种简单的方式,如果没有定义构造函数,则会有一个默认的无参构造函数。另外,也可以通过如下方式构造函数:

class Person {
  String name;
  String sex;
  Person(this.name, this.sex);
  Person.loadData(this.name, this.sex) {}
}

Person.loadData提供了一种新的构造方式,可以极大地提高代码可读性,如果我们想调用上面已经定义好的构造函数,可采用如下方法:

class Person {
  String name;
  String sex;

  Person(this.name, this.sex);

  Person.loadData(this.name, this.sex) {}

  Person.load(String name) : this(name, "");
}

通过“:”和this重定向Person构造函数,如果将成查看Flutter源码的话会发现如下写法:

Person(this.name, this.sex)
  : assert(name != null),
assert(sex != null),
age = "name:$name" {
//这里是构造函数,也可以省略
  }

Assert是检查语句,这种形式是类的初始化列表形式。

类的运算符重载

类的运算符重载有什么作用呢?如果我们想让两个对象相加,进而得出相关属性的相加,默认情况下是没有对象相加这个功能的,这时就可以用重载“+”运算符完成上述功能,代码如下:

class Person {
  String name;
  String sex;
  String age;

  Person(this.name, this.sex)
  : assert(name != null),
assert(sex != null),
age = "name:$name" {
//这里是构造函数,也可以省略
  }

  operator +(Person person) {
return Person(person.name, this.age + person.age);
  }
}

想要完成类的运算符重载只需要使用operator关键字,调用如下:

var p1 = Person("王三", "男");
var p2 = Person("王三1", "男1");
var p3 = p1 + p2;

Dart中允许重载的运算符如表所示:
Dart 类定义

extends、with、implements、abstract的用法

1.extends
类的继承使用关键字extends,只能继承一个类,用法如下:

class Person1{}
class Person2 extends Person1{}

子类重写父类的方法要使用@override关键字,调用父类的方法要使用super,子类可以访问父类所有的变量和方法,因为Dart中是没有public、private修饰符的。

2.with
Dart中使用关键字with来“继承”多个类,用法如下:

class Person1 {
  String getSex() {
return "";
  }
}
class Person2 {}

class Person22{}

class Person4 extends Person1 with Person2,Person22 {}
class Person5 with Person1, Person2 {}

3.implements
Dart中没有interface关键字定义接口,但是,Dart中每一个类都是一个隐式的接口,这个接口里包含类的所有方法和变量,因此,当我们实现一个类时,需要在子类里面实现其方法和变量,用法如下:

class Person1 {
  String getSex() {
return "";
  }
}

class Person8 implements Person1 {
  @override
  String getSex() {
return null;
  }
}

4.abstract
abstract关键字是定义抽象类的,子类继承抽象类时要实现其抽象方法,用法如下:

abstract class Person6 {
  String getName();
  String getSex() {
return "";
  }
}
class Person7 extends Person6{
  @override
  String getName() {
return null;
  }
}

定义私有变量

Dart中是没有public、private这些修饰符使用的,那我们该如何定义私有变量呢?很简单,只要在属性名称前面加上“_”即可,不过使用这种方式定义的私有变量的作用域是当前Dart文件,也就是只要在当前Dart文件中就可以访问,即使不是同一个类,而其他Dart文件无法访问。用法如下:

class Person1 {
  String name;
  int _age; // 私有变量

  Person1(this.name, this._age);
}

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!