基本定义
类
类是一个包裹多个对象成员的一个整体,可以通过实例化获取类的对象,通过对象操纵内部对象
对象
对象具有由函数和数据(分别为方法和 实例变量)组成的成员。调用方法时,您会在对象上调用它:该方法可以访问该对象的函数和数据。
类的使用
定义一个类
class Person {String? name;int? age;String? sex;void printInfo() {print("name: $name, age: $age, sex: $sex");}
}
使用类
先生成这个类的对象,然后使用类的对象操作类
注意:使用new和不使用new,都可以正常生成对象
// 实例化对象
var p = Person();
// 实例化对象使用new
// var p = new Person();
p.name= "张三";
p.age= 18;
p.sex= "男";
p.printInfo();
构造函数
使用类的名称创建一个构造函数,可以在创建对象时,往其中传值,在类创建时,为参数赋值
class Person {String? name;int? age;String? sex;Person(this.name,this.age,this.sex);void printInfo() {print("name: $name, age: $age, sex: $sex");}
}
void main() {// 实例化对象var p = Person('张三', 18, '男');p.printInfo();
}
静态变量和方法
一般变量和方法只在类范围内有效,在外部想用需要先生成对象,除非使用static修饰变量或者方法,将变量或方法修改为静态变量和方法
class Person {static String name = "张三";static void printName() {print(name);}
}
void main() {//直接调用变量print(Person.name);//直接调用方法Person.printName();
}
继承
用于extends
创建子类,并super
引用超类:
子类可以使用父类的参数和方法,也可以重写父类的方法,使用super.来调用父类的内容
class Person {String? name;int? age;String? sex;Person(this.name,this.age,this.sex);void printInfo() {print("name: $name, age: $age, sex: $sex");}void breath() {print("我可以呼吸");}
}class Student extends Person {String? school;Student(String name, int age, String sex, this.school) : super(name, age, sex);//重写父类的方法,使用@override注解标示void printInfo() {print("name: $name, age: $age, sex: $sex, school: $school");//调用父类的方法super.breath();}
}
void main() {// 实例化对象var p = Student("小明", 18, "男", "清华大学");p.printInfo();
}
混入(Mixin)
如果你想为很多的类提供一个公用的接口,并且可以在每个类中进行调用,可以使用混合。
定义一个mixin
使用mixin关键字定义
mixin Football {String? footballClub;void playFootball(String? footballClub) {print("$footballClub playing football");}
}
使用mixin
要使用 mixin,请使用with
关键字,后跟一个或多个 mixin 名称(可以跟一个或多个mixin)
class Student with Football {String? name;int? age;String? sex;String? school;Student(this.name, this.age, this.sex, this.school);void printInfo() {print("$name,$age,$sex,$school");}
}
调用mixin
void main() {// 实例化对象var p = Student("小明", 18, "男", "清华大学");p.playFootball(p.school);
}
接口
接口(Interface)是一种定义对象行为的蓝图。它描述了一组方法和属性,但不提供具体的实现。任何实现了该接口的类都必须提供这些方法和属性的具体实现。
定义一个接口
abstract interface class maker{void make();
}
使用一个接口
mixin Football implements maker{String? footballClub;void playFootball(String? footballClub) {print("$footballClub playing football");}
}
实现接口的实体类,必须实现接口的方法,否则会编译报错
abstract interface class maker{void make();
}
mixin Football implements maker{String? footballClub;void playFootball(String? footballClub) {print("$footballClub playing football");}
}class Student with Football {String? name;int? age;String? sex;String? school;Student(this.name, this.age, this.sex, this.school);void printInfo() {print("$name,$age,$sex,$school");}void make() {print("制作一个足球");}
}
void main() {// 实例化对象var p = Student("小明", 18, "男", "清华大学");p.playFootball(p.school);
}
枚举
枚举类型,通常称为枚举或枚举,是一种用于表示固定数量的常量值的特殊类。
实现简单枚举
enum Color { red, green, blue }
使用枚举
像访问其他静态变量一样访问枚举值:
final favoriteColor = Color.blue;
if (favoriteColor == Color.blue) {print('Your favorite color is blue!');
}