不多说了上代码!!!
///定义一个Dart类,所有的类都继承自Object,并且都是默认继承的,所以不需要使用extends
class Person {
String name;
int ages;
///标准的构造方法
Person(this.name, this.ages);
///多态的体现,重载
@override
String toString() {
return 'name:$name,age$ages';
}
}
class Student extends Person {
String _school; //通过_(下划线)来标识私有字段(变量)
String city;
String country;
String name;
///可以为私有字段设置getter来让外界获取到私有字段
String get school =>_school;
///可以为私有字段设置setter来控制外界对私有字段的修改
set schllo(String value){
_school=value;
}
//静态方法
static doPrint(String str){
print("doPrint:$str");
}
///构造方法:
///通过this._school初始化自有参数
///name,age交给父类进行初始化
///city为可选参数
///country为默认参数
Student(this._school, String name, int ages,
{this.city, this.country = "China"})
: //初始化列表:除了调用父类构造器,载子类构造器方法体之前,你也可以额初始化实例变量,不同的初始化变量之间用逗号分隔开
name = '$country.$city',
//如果父类没有默认构造方法(无参数的构造方法),则需要载初始化列表中调用父类的构造方法进行初始化
super(name, ages){
print('构造方法体不是必须的,也就是{}里面的,这样只是简化了初始时的工作');
}
@override
String toString() {
return 'Student{name: $name} ${this._school},city:$city,country:$country ${super.toString()}';
}
///命名构造方法:[类名.方法名]
///使用命名构造方法为类实现多个构造方法
Student.cover(Student student):super(student.name,student.ages){
print('命名构造方法');
}
///命名工厂构造方法:factory【类名.方法名】
///它可以有返回值,而且不需要将类的final变量作为参数(在命名构造方法中final修饰的变量就必须进行初始化),是提供一种灵活获取对象的方式
factory Student.stu(Student student){
return Student(student._school, student.name, student.ages);
}
}
class Logger{
//创建静态实例
static Logger _cache;
//工厂构造方法都会使用factory关键字进行标识,工厂构造方法一般用于返回唯一类的实例
factory Logger(){
if(_cache==null){
_cache=Logger._internal();
}
return _cache;
}
//下面也是构造方法的一种,只是私有化了而已
Logger._internal();
void log(String msg){
print(msg);
}
}
///使用abstract修饰符来定义一个抽象类,该类不能被实例化
abstract class Study{
void study();
}
//继承抽象类就要实现它的抽象方法
class StudyFlutter extends Study{
@override
void study() {
print('Learning Flutter');
}
}
///为类添加特征:mixins
///mixins 是在多个类层次结构中重用代码的一种方式
///要是用mixins,在with关键字后面跟上一个或多次mixins的名字(用逗号分开),并且with要用在extends的后面
///mixins的特征:实现mixins,就创建一个继承Object类的子类(不能继承其他类),不声明任何构造函数,不调用super
///Study就是mixins
class Test extends Person with Study{
Test(String name, int ages) : super(name, ages);
@override
void study() {
// TODO: implement study
}
}