Dart学习笔记(十一)

65 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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