6- 2 类与对象
主文件
// 引入库(dart 文件)import 'calss_and_obj2.dart';
void main() {
// 创建一个对象
var getp = new p();
// 赋值 写入类中的属性的值
getp.name = 'tom';
getp.age = 20;
// 获取值 读类中的属性
print(getp.name);
// 读类中的方法
getp.work();
print(getp.address);
}
引入文件
// 声明一个类
class p {
// 加下划线代表私有的 只在当前 dart 文件中可以调用 外链的 dart 文件不可见
// 属性和方法也可加下划线表示私有
// class _p{
String name;
int age;
// final 定义的 只能读不能写
final String address = 'aaaa';
// 声明方法
void work() {print('name is $name,age=$age,he is working');
}
}
6- 3 计算属性
// void main(){// var rect=new Rctangle();
// rect.height=20;
// rect.width=10;
// print(rect.area());
// }
// class Rctangle{
// num width,height;
// num area(){
// return width * height;
// }
// }
void main() {var rect = new Rctangle();
rect.height = 20;
rect.width = 10;
print(rect.area);
rect.area = 200;
print(rect.width);
}
class Rctangle {
num width, height;
// 计算属性 get 获取值 也可以 set
num get area {return width * height;}
set area(value) {width = value / 20;}
}
6- 4 构造方法
void main() {// var person=new Person('Tom',30,'male');
var person = new Person('Tom', 30);
var person1 = new Person.getn('Tom1');
person.name = 'topm';
person.age = 20;
print(person.name);
print(person.age);
print(person1.name);
// print(person.gender);
}
class Person {
String name;
int age;
// 构造方法 如果有自定义的构造方法 那么默认的是不要的
Person(String name, int age) {
this.name = name;
this.age = age;
}
// final String gender;
// 语法糖 这种方法可以 给 final 变量赋值
// Person(this.name,this.age,this.gender);
// 有名字的构造方法
Person.getn(this.name);
void work() {print('working');
}
}
6- 5 常量构造方法
// 常量构造方法
void main() {const person = const Person('Tom', 30);
print(person.name);
}
class Person {
final String name;
final int age;
// 构造方法 如果有自定义的构造方法 那么默认的是不要的
const Person(this.name, this.age);
// final String gender;
// 语法糖 这种方法可以 给 final 变量赋值
// Person(this.name,this.age,this.gender);
// 有名字的构造方法
// Person.getn(this.name);
void work() {print('working');
}
}
6- 6 工厂构造方法
class Logger {
final String name;
// Map<String, Logger> 泛型 来限制 key value 的类型
static final Map<String, Logger> _cache = <String, Logger>{};
// 工厂构造方法 可以返回对象
factory Logger(String name) {if (_cache.containsKey(name)) {return _cache[name];
} else {final logger = Logger._internal(name);
_cache[name] = logger;
return logger;
}
}
// 构造方法是不能有返回值的
Logger._internal(this.name);
void log(String msg) {print(msg);
}
}
6- 7 初始化列表
// 常量构造方法
void main() {var a = {'name': '1', 'age': 2, 'gender': '3'};
var person = new Person.withmap(a);
print(person.name);
}
class Person {
String name;
int age;
final String gender;
Person(this.name, this.age, this.gender);
// 列表构造方法 执行时间 在构造方法前面 可以对 final 属性赋值
Person.withmap(Map map) : gender = map['gender'] {this.name = map["name"];
this.age = map['age'];
}
void work() {print('working');
}
}
6- 8 静态成员
1 非静态的方法可以访问静态属性
2 静态方法不能使用实例化对象来访问 只能通过类名加方法名访问
3 在类中声明常量 static const int age=10;
6- 9 对象操作符
import 'constructors.dart';
void main() {// Person person=new Person();
// 条件运算符 解决空指针问题
// 对象不为空 执行
// person?.work();
// var person;
// person='';
// person=new Person();
// person.work();
// 把对象转换成 xx 类型 强转
// (person as Person).work();
// 判断对象是否为 Person 对象类型
// if(person is Person){// person.work();
// }
// 判断对象不是 Person 对象类型
// else if(person is! Person){// print('11111');
// }
var person = new Person();
// person.name='aa';
// person.age=30;
// 级联操作
person
..name = 'aa'
..age = 30;
print(person.name);
}
class Person {
String name;
int age;
void work() {print('working');
}
}
6-10 对象 call 方法
void main() {var person = new Person();
// person.name='aa';
// person.age=30;
// print(person.name);
// name is null
// 执行类中的 call 方法
person('gggggg');
}
class Person {
String name;
int age;
void work() {print('working');
}
// 也可以写成有返回值的 名称必须为 call
void call(String name) {print('name is $name');
}
}