本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Dart 把类单独抽离成一个模块
在当前目录 新建lib文件夹 文件夹里新建Person.dart文件
// 引入类模块
import 'lib/Person.dart';
void main() {
Person p1 = new Person('张三', 25);
p1.printInfo();
}
Person.dart文件内容
class Person {
String name = "张三";
int age = 20;
// 构造函数
Person(this.name, this.age);
void printInfo() {
print("${this.name}------${this.age}");
}
}
Dart 私有方法和私有属性
Dart 和其他面向对象语言不一样, Dart中没有 public private protected这些访问修饰符合
但是我们可以使用 _ 把一个属性或者方法定义成私有 私有属性必须有一个单独的文件
import 'lib/Animal.dart';
void main() {
Animal a = new Animal('小狗', 3);
// print(a._name); // 无法访问私有属性
print(a.age); // 3
print(a.getName()); // 小狗 通过共有方法访问私有属性
// a._run(); // 无法访问私有方法
a.execRun(); // 通过共有方法访问私有方法 间接调用
}
Dart getter和setter修饰符
class Rect {
num height;
num width;
Rect(this.height, this.width);
area() {
return this.height * this.width;
}
}
void main() {
Rect r = new Rect(10, 4);
print("面积: ${r.area()}"); // 面积: 40
}
getter修饰符
代码如下:
class Rect {
num height;
num width;
Rect(this.height, this.width);
get area {
return this.height * this.width;
}
}
void main() {
Rect r = new Rect(10, 4);
print("面积: ${r.area}"); // 面积: 40 注意调用直接通过访问属性的方法访问area
}
setter修饰符
代码如下:
class Rect {
num height;
num width;
Rect(this.height, this.width);
area() {
return this.height * this.width;
}
set areaHeight(value) {
this.height = value;
}
}
void main() {
Rect r = new Rect(10, 4);
r.areaHeight = 6;
print(r.area());
}
getter setter
代码如下:
class Rect {
num height;
num width;
Rect(this.height, this.width);
get area {
return this.height * this.width;
}
set areaHeight(value) {
this.height = value;
}
}
void main() {
Rect r = new Rect(10, 4);
r.areaHeight = 6;
print(r.area);
}
Dart 类的初始化列表
Dart 中我们也可以在构造函数体运行之前初始化实例变量
class Rect {
num height;
num width;
// 实例初始化之前 赋初始值
Rect(): height = 2, width = 3 {
print("${this.height}------${this.width}");
}
getArea() {
return this.height * this.width;
}
}
void main() {
Rect r = new Rect();
print(r.getArea());
}