类
构造方法1
class Point {
var _x; // _:私有属性,外部不能直接访问
var y; // 公有属性
Point(this._x, this.y) { // 构造方法
print("${_x} - ${y}");
}
Point.y(int y) { // 命名构造方法
print(y);
}
Point.yy(int yy): this(2, yy); // 重定向构造方法
}
void main() {
var p = new Point(1, 2);
var p1 = new Point.y(11);
var p2 = new Point.yy(22);
}
构造方法2
class Student {
final String name;
final int age;
// 常量构造方法
const Student(this.name, this.age);
// 工厂构造方法,返回值必须是Student对象
factory Student.get() {
return new Student("BB", 8); // 可以省略new,写成:Student("BB", 8);
}
}
void main() {
var s1 = const Student("AA", 2);
var s2 = const Student("AA", 2);
print(s1.hashCode == s2.hashCode); // true(s1和s2是同一个对象)
print(s1 == s2); // true
var s3 = const Student("AA", 2);
var s4 = const Student("AA", 5);
print(s3.hashCode == s4.hashCode); // false(s3和s4不是同一个对象)
print(s3 == s4); // false
var s = Student.get();
print("${s.name} - ${s.age}");
}
set与get方法
class Circle {
var _x; // 私有属性
// get方法,getter是方法名,随便定义
int get getter => _x;
// set方法,setter是方法名,随便定义
set setter(var x) => _x = x;
// 操作符重载
Circle operator +(Circle c) {
var cc = new Circle();
cc._x = _x + c._x;
return cc;
}
void call(int x) {
print("call - ${x}");
}
}
void main() {
var c = new Circle();
c.setter = 11; // 调用set方法
print(c.getter); // 调用get方法
c(666); // 相当于c.call(666); 方法名必须为call
var c1 = new Circle();
c1.setter = 10;
var c2 = new Circle();
c2.setter = 20;
var c3 = c1 + c2;
print(c3.getter);
}