Flutter学习日记(五)--Dart类的构造

不多说了上代码!!!

///定义一个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
  }

}


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容