//定义一个类的属性和方法
class Person {
String name = '张三';
int age = 19;
void getInfo() {
// print('我叫$name,今年$age');第一种
//推荐使用这样的写,通过this去访问
print("${this.name}====${this.age}");
}
}
//使用类中的属性和方法
void main() {
// 调用Perso这个类 首先需要实例化这个类
// Person p = new Person(); // 等价 var p=new Person
var p = new Person();
print(p.age);
p.getInfo();
}
2 .改变类中的属性和方法
class Person {
String name = '张三';
int age = 19;
void getInfo() {
//推荐使用这样的写法
print("${this.name}====${this.age}");
}
//限制类型,更改类中的属性和方法
SetUserinfo(int age) {
this.age = age;
}
}
void main() {
// 调用Perso这个类 首先需要实例化这个类
Person p = new Person(); // 等价 var p=new Person
print(p.age);//19
p.getInfo();//张三====19
p.SetUserinfo(100);
p.getInfo();//张三====100
}
3.默认构造函数
class Person {
//这是一个默认构造函数
Person() {
print('默认构造函数里面的内容,该方法在实例化的时候会自动出发哈');
}
}
void main() {
// 实例化的时候,会自动触发默认构造函数
Person p = new Person(); // 等价 var p=new Person
}
4. 动态传递,类多次实例化,打印不同的值
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void getuserInfo() {
print(this.name);
print(this.age);
}
}
void main() {
// 实例化的时候,会自动触发
Person p = new Person('张三', 10); // 等价 var p=new Person
p.getuserInfo();
//这个类可以实例化多次的哈
Person v = new Person('张三1', 100); // 等价 var p=new Person
v.getuserInfo();
}
5.默认构造函数简写
class Person {
String name;
int age;
// Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
//上面注释的代码等价于 Person(this.name, this.age);
Person(this.name, this.age);
void getuserInfo() {
print(this.name);
print(this.age);
}
}
6.命名构造函数,命名构造函数是可以写多个的;但是默认构造函数只能写一个
class Person {
//我是默认的构造函数
Person() {
print('我是默认的构造函数');
}
// 命名构造函数
Person.mynow() {
print('我是命名构造函数');
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Person p = new Person(); // 等价 var p=new Person
Person v = new Person.mynow(); // 触发命名构造函数
}
7.类抽离出去,单独放一个文件夹中
在项目的根目录创建一个文件夹 lib
在lib文件夹中创建一个文件 xxx.dart内容如下
class Person {
//我是默认的构造函数
Person() {
print('我是默认的构造函数');
}
// 命名构造函数
Person.mynow() {
print('我是命名构造函数');
}
}
在需要的某个文件中引入
import 'lib/xxx.dart';
void main() {
// 实例化的时候,会默认构造自动触发
Person p = new Person(); // 等价 var p=new Person
Person v = new Person.mynow(); // 触发命名构造函数
}
class Rect {
num width;
num height;
Rect(this.width, this.height);
getUserINfo() {
return (this.width * this.height);
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4); // 等价 var p=new Person
print(p.getUserINfo());
}
将上面的代码改为get方法
class Rect {
num width;
num height;
Rect(this.width, this.height);
// getUserINfo() {
// return (this.width * this.height);
// }
// 将上面的代码该为get
get getUserINfo {
return (this.width * this.height);
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4);
// print(p.getUserINfo());
// 将上面的代码改为get方法的调用
print(p.getUserINfo);//调用的时候直接通过访问属性的方式访问方法
}
10.dart 中的set 方法
class Rect {
num width;
num height;
Rect(this.width, this.height);
// 设置值的时候。我们使用了set方法
set areaHeight(value) {
this.height = value;
}
get area {
return this.height;
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect(10, 4);
p.areaHeight = 6; //当一个类的内部使用了set方法的时候。我们直接使用赋值;
print(p.area); //内部使用了get 我们这直接通过属性获取值
}
11.在实例化之前,给类内部初始化数值
class Rect {
num width;
num height;
// 在实例化之前,给类内部初始化数值
Rect()
: height = 2,
width = 10 {}
get area {
return this.height * this.width;
}
}
void main() {
// 实例化的时候,会默认构造自动触发
Rect p = new Rect();
print(p.area); //内部使用了get 我们这直接通过属性获取值
}