/**
* Dart所有的东西都是对象, 所有的对象都是继承自Object类
* Dart是一门实用类和单继承的面向对象语言, 所有的对象都是类的实例, 并且所有的类都是Object的子类
* 面向对象的三个基本特征: 封装, 继承, 多态
* 这和Object-C Swift Java等面向对象语言一样
*
* Dart里面构造函数可以写多个
* Dart中没有public, private protected等这些访问修饰符
* 但是我们可以使用一个下划线_把一个属性或者方法定义成私有,
* 这样使用需要将类单独放到一个文件里面抽离出来
*/
//通过import引入别的文件的类,和其他语言都差不多
import "lib/Stu.dart";
main(List
List
l.add(2);
// var p = new Person();
// p.des();
// p.name = "王五";
// p.des();
Person1 p1 = new Person1("李四", 30);
p1.des();
Person2 p2 = new Person2("王五", 22);
p2.des();
Person3 p3 = new Person3.des("小红", 28);
p3.des();
print(p3.introlduce);
p3.name = "小虎";
print(p3.introlduce);
p3.introduceMap = {"name": "小鹿", "age": 28};
print(p3.introlduce);
Student stu = new Student("小红", 10);
stu.des();
// stu._name = "daxa";//这里是拿不到_name的,因为_name是私有属性
Rect r = new Rect();
print(r.area);
}
// 定义类用class关键字, 首字母大写
class Person {
String name = "张三";
int age = 20;
// **** 默认构造函数,在使用new创建对象实例的时候就会触发这个函数
Person() {
print("这是构造函数, 在使用new创建对象实例的时候就会触发这个函数!");
}
void des() {
print("${this.name}, ${this.age}");
}
void des1() {
print("$name-$age");
}
}
// 定义类用class关键字, 首字母大写
class Person1 {
String name;
int age;
// **** 默认构造函数,在使用new创建对象实例的时候就会触发这个函数
// 在构造函数中进行初始化属性
Person1(String name, int age) {
this.name = name;
this.age = age;
print("这是构造函数, 在使用new创建对象实例的时候就会触发这个函数!");
}
void des() {
print("${this.name}, ${this.age}");
}
void des1() {
print("$name-$age");
}
}
// 定义类用class关键字, 首字母大写
class Person2 {
String name;
int age;
// **** 默认构造函数,在使用new创建对象实例的时候就会触发这个函数
// 在构造函数中进行初始化属性
// 这样可以简写一下,就是直接将参数写成this.的形式
Person2(this.name, this.age) {
print("这是构造函数, 在使用new创建对象实例的时候就会触发这个函数!");
}
void des() {
print("${this.name}, ${this.age}");
}
void des1() {
print("$name-$age");
}
}
// 自定义的命名构造函数
// 自定义构造函数可以写多个
class Person3 {
String name;
int age;
// 默认构造函数 new Person3是调用
Person3(this.name, this.age) {}
// 这是命令构造函数 new Person3.des时调用
Person3.des(this.name, this.age) {}
void des() {
print("${this.name}, ${this.age}");
}
//计算属性: get 属性名 {}
get introlduce {
// return的值就是introlduce的值
return "自我介绍:${this.name}, ${this.age}";
}
// set 属性名(参数) {}
set introduceMap(value) {
this.name = value["name"];
this.age = value["age"];
}
}
// 初始化赋值
class Rect {
int width;
int height;
Rect()
: height = 10,
width = 5 {
print("这种写法,height和width的赋值,是在初始化之前");
}
get area {
return this.width * this.height;
}
}