美文网首页flutter
Dart类的创建

Dart类的创建

作者: 习惯了_就好 | 来源:发表于2018-11-21 13:55 被阅读128次

    Dart类默认继承Object类,定义一个类,内部有多种写法。
    第一种可以跟java定义对象相同。

    没有 public、private 之类的访问权限控制符,默认情况下,所有的符号都是公开的,get和set方法没什么意义。

    如果我们不想某个变量对外部可见,可以使用下划线开头来给变量命名,效果类似添加private限制 。

    class Person {
      String name;
      int _age;
    
      //  get方法
      String getName() {
        return name;
      }
    
      int getAge() {
        return _age;
      }
    
      //set方法
      void setName(String name) {
        this.name = name;
      }
    
      void setAge(int age) {
        this._age = age;
      }
    }
    
    
    var person = Person();
    person.setName("lise");
    print(person.getName());
    

    第二种Dart常用方式

    构造函数通常有三种方式

      //默认构造函数
    //  Person() {}
    
      //初始化
    //  Person(String name, int age, int sex) {
    //    this.name = name;
    //    this._age = age;
    //    this._sex = sex;
    //  }
    
      //简化的初始化,自动赋值
    //  Person(this.name, this._age, this._sex) {}
    
      //  使用初始化列表(initializer list)对对象进行初始化
      //系统会自动辨别,第一个age是this.age,第二个age是形参age
      Person(String name, int age, int sex)
          :name = name,
            _age = age,
            _sex = sex {}
    

    类变量的get、set方法,通常用去掉下划线后名字命名,这样get、set可以像属性一样使用。

    class Person {
      String name;
      int _age;
    
      Person(String name, int age)
          :name = name,
            _age = age {}
    
    
      //  get方法
      String get getName => name;
    
      int get age => _age;
    
      //set方法
    
      void set setName(String name) => this.name = name;
    
      void set age(int age) => this._age = age;
    
    }
    
    var person = Person("zhagnsan", 20, 0);
    print(person.age);
    person.age = 10;
    print(person.age);
    

    Person类内部各种写法

    class Person {
      //没有 public、private 之类的访问权限控制符,默认情况下,所有的符号都是公开的。
      // 如果我们不想某个变量对外部可见,可以使用下划线开头来给变量命名。
      String name;
      int _age;
      int _sex; //0男  1女
      //默认构造函数
    //  Person() {}
    
      //初始化
    //  Person(String name, int age, int sex) {
    //    this.name = name;
    //    this._age = age;
    //    this._sex = sex;
    //  }
    
      //简化的初始化,自动赋值
    //  Person(this.name, this._age, this._sex) {}
    
      //  使用初始化列表(initializer list)对对象进行初始化
      //系统会自动辨别,第一个age是this.age,第二个age是形参age
      Person(String name, int age, int sex)
          :name = name,
            _age = age,
            _sex = sex {}
    
    
      //  get方法
    //  String getName() {
    //    return name;
    //  }
    //
    //  int getAge() {
    //    return _age;
    //  }
    
      String get getName => name;
    
      int get age => _age;
    
      int get sex {
        return _sex;
      }
    
      //set方法
    //  void setName(String name) {
    //    this.name = name;
    //  }
    //
    //  void setAge(int age) {
    //    this._age = age;
    //  }
    
      void set setName(String name) => this.name = name;
    
      void set age(int age) => this._age = age;
    
      void set sex(int sex) {
        this._sex = sex;
      }
    
    
    }
    

    类的集成也是使用extends关键字

    import 'package:test1/bean/Person.dart';
    
    class Student extends Person {
    
      int _grade;
      int _number;
    
      // 父类的构造函数只能在 initializer list 里调用
      Student(String name, int age, int sex, int grade, int number)
          :_grade = grade,
            _number = number,
            super(name, age, sex);
    
      int get grade => _grade;
    
      int get number => _number;
    
      void set grade(int grade) => this._grade = grade;
    
      void set number(int number) => this._number = number;
    
    }
    

    类的集成执行顺序为:

    • 先执行子类 initializer list,但只初始化自己的成员变量
    • 初始化父类的成员变量
    • 执行父类构造函数的函数体
    • 执行之类构造函数的函数体

    泛型类
    跟 Java 不同,Dart 的泛型参数类型在运行时是保留的。

    class Info<T, S, K> {
      T member1;
      S member2;
      K member3;
    
      Info(this.member1, this.member2, this.member3);
    }
    
    var info = Info("lisi", 20, "abc");
    print("泛型使用:" + info.member1);
    print("泛型使用:${info.member2}");
    print("泛型使用:"  "${info.member3}");//奇葩的字符串连接方式,竟然可以使用空格
    

    练习demo,链接https://gitee.com/xgljh/Flutter

    相关文章

      网友评论

        本文标题:Dart类的创建

        本文链接:https://www.haomeiwen.com/subject/yoxcqqtx.html