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中允许重载的运算符如表所示:
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);
}
酷客网相关文章:
评论前必须登录!
注册