flutter

Dart类的创建

2018-11-21  本文已影响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;

}

类的集成执行顺序为:

泛型类
跟 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

上一篇 下一篇

猜你喜欢

热点阅读