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泛型 来限制key value的类型
static final Map _cache = {};
// 工厂构造方法 可以返回对象
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');
}
}