Dart类默认继承Object类,定义一个类,内部有多种写法。
第一种可以跟java定义对象相同。
没有 public、private 之类的访问权限控制符,默认情况下,所有的符号都是公开的,get和set方法没什么意义。
如果我们不想某个变量对外部可见,可以使用下划线开头来给变量命名,效果类似添加private限制 。
class Person {
String name;
int _age;
// get方法
String getName() {
return name;
}
int getAge() {
return _age;
}
//set方法
void setName(String name) {
this.name = name;
}
void setAge(int age) {
this._age = age;
}
}
var person = Person();
person.setName("lise");
print(person.getName());
第二种Dart常用方式
构造函数通常有三种方式
//默认构造函数
// Person() {}
//初始化
// Person(String name, int age, int sex) {
// this.name = name;
// this._age = age;
// this._sex = sex;
// }
//简化的初始化,自动赋值
// Person(this.name, this._age, this._sex) {}
// 使用初始化列表(initializer list)对对象进行初始化
//系统会自动辨别,第一个age是this.age,第二个age是形参age
Person(String name, int age, int sex)
:name = name,
_age = age,
_sex = sex {}
类变量的get、set方法,通常用去掉下划线后名字命名,这样get、set可以像属性一样使用。
class Person {
String name;
int _age;
Person(String name, int age)
:name = name,
_age = age {}
// get方法
String get getName => name;
int get age => _age;
//set方法
void set setName(String name) => this.name = name;
void set age(int age) => this._age = age;
}
var person = Person("zhagnsan", 20, 0);
print(person.age);
person.age = 10;
print(person.age);
Person类内部各种写法
class Person {
//没有 public、private 之类的访问权限控制符,默认情况下,所有的符号都是公开的。
// 如果我们不想某个变量对外部可见,可以使用下划线开头来给变量命名。
String name;
int _age;
int _sex; //0男 1女
//默认构造函数
// Person() {}
//初始化
// Person(String name, int age, int sex) {
// this.name = name;
// this._age = age;
// this._sex = sex;
// }
//简化的初始化,自动赋值
// Person(this.name, this._age, this._sex) {}
// 使用初始化列表(initializer list)对对象进行初始化
//系统会自动辨别,第一个age是this.age,第二个age是形参age
Person(String name, int age, int sex)
:name = name,
_age = age,
_sex = sex {}
// get方法
// String getName() {
// return name;
// }
//
// int getAge() {
// return _age;
// }
String get getName => name;
int get age => _age;
int get sex {
return _sex;
}
//set方法
// void setName(String name) {
// this.name = name;
// }
//
// void setAge(int age) {
// this._age = age;
// }
void set setName(String name) => this.name = name;
void set age(int age) => this._age = age;
void set sex(int sex) {
this._sex = sex;
}
}
类的集成也是使用extends关键字
import 'package:test1/bean/Person.dart';
class Student extends Person {
int _grade;
int _number;
// 父类的构造函数只能在 initializer list 里调用
Student(String name, int age, int sex, int grade, int number)
:_grade = grade,
_number = number,
super(name, age, sex);
int get grade => _grade;
int get number => _number;
void set grade(int grade) => this._grade = grade;
void set number(int number) => this._number = number;
}
类的集成执行顺序为:
- 先执行子类 initializer list,但只初始化自己的成员变量
- 初始化父类的成员变量
- 执行父类构造函数的函数体
- 执行之类构造函数的函数体
泛型类
跟 Java 不同,Dart 的泛型参数类型在运行时是保留的。
class Info<T, S, K> {
T member1;
S member2;
K member3;
Info(this.member1, this.member2, this.member3);
}
var info = Info("lisi", 20, "abc");
print("泛型使用:" + info.member1);
print("泛型使用:${info.member2}");
print("泛型使用:" "${info.member3}");//奇葩的字符串连接方式,竟然可以使用空格
练习demo,链接https://gitee.com/xgljh/Flutter
网友评论