类
// class关键字定义类
class Person {
// 没有public、protected、privated 访问修饰符号
int age;
String name;
// _开头 标记内部
bool _isOK;
// dart 和java不一样 多态机制
// 不支持不同参数个数和位置的构造函数or方法
// Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
//上面的简化写法
Person(this.name, this.age);
// 命名构造函数
Person.fromJson(Map json) {
name = json["name"];
age = json["age"];
}
// 实例方法
void sayName() {
print('person\' '+name);
}
}
class Student extends Person {
// 主类中调用父类的构造函数必须这么调用
Student(String name, int age):super(name, age) {
// super(name, age); // not work
}
}
void main() {
Person p1 = new Person("ngnice", 10);
print(p1?.name);
Person p2 = new Person.fromJson({
"name": "ngnice2",
"age": 110
});
print(p2.age);
Student s1 = new Student("alo", 199);
s1.sayName();
}
Dart中特别的地方
- 不支持java式的多态(同名函数签名唯一)
- 支持
Person(this.x, this.y)
简单赋值语法- 支持命名的构造函数
Person.fromJson
- 默认情况下,子类的构造函数会自动调用超类的 无名无参数的默认构造函数,没有无名的构造函数,需要手动调用父类的构造函数
- 继承的时候调用父类的构造函数比较特别。
注意点
- 没有访问控制修饰符 public privated protected等 通过
_
来标记是内部方法或属性
网友评论