Dart入门04 -- 类,构造函数,setter,getter

2022-02-19  本文已影响0人  YanZi_33

void main(List<String> args) {
  Person person = new Person("yanzi", 33);
  person.run();
  person.eat();
}

class Person {
  //属性成员
  String name;
  int age;

  //构造方法
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  //实例方法
  void run() {
    print("run");
  }

  void eat() {
    print("eat");
  }
}
默认构造函数
void main(List<String> args) {
  //无参构造函数
  Person person = new Person();
  person.run();
  person.eat();
}

class Person {
  //属性成员
  String name;
  int age;

  //实例方法
  void run() {
    print("run");
  }

  void eat() {
    print("eat");
  }
}
自定义构造函数
void main(List<String> args) {
  Person person = new Person("yanzi", 33);
  person.run();
  person.eat();
}

class Person {
  //属性成员
  String name;
  int age;

  //自定义构造函数
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  //实例方法
  void run() {
    print("run");
  }

  void eat() {
    print("eat");
  }
}
void main(List<String> args) {
  Person person = new Person("yanzi", 33);
  person.run();
  person.eat();
}

class Person {
  //属性成员
  String name;
  int age;

  //自定义构造函数 -- 语法糖
  Person(this.name, this.age);

  //实例方法
  void run() {
    print("run");
  }

  void eat() {
    print("eat");
  }
}
命名构造函数
void main(List<String> args) {
  Person person = Person.withNameAndAge("yanzi", 32);
  person.run();
  person.eat();

  Person person1 = Person.fromMap({"name": "li", "age": 30});
  person1.run();
  person1.eat();
}

class Person {
  //属性成员
  String name;
  int age;

  //命名构造函数
  Person.withNameAndAge(this.name, this.age);

  Person.fromMap(Map<String, dynamic> map) {
    this.name = map["name"];
    this.age = map["age"];
  }

  //实例方法
  void run() {
    print("run");
  }

  void eat() {
    print("eat");
  }
}
构造函数包含可选参数
void main(List<String> args) {
  Person person1 = Person("yanzi");
  Person person2 = Person("sss", age: 22);

  Person person3 = Person.init("aaa");
  Person person4 = Person.init("cccc", age: 26);
}

class Person {
  String name;
  int age;

  //其中age为可选参数
  Person(String name, {int age}) {
    this.name = name;
    this.age = age;
  }

  //其中age为可选参数
  Person.init(this.name, {this.age});
}
初始化列表
main(List<String> args) {
  var p = Person("SF");
  print(p.age);
}

class Person {
  //被final修饰的变量为常量 只能被赋值一次
  final String name;
  final int age;

  //初始化列表与C++语法类似
  //创建对象时,若传入age,那么就使用传入的age,如果没有传入age,那么使用默认值10,age为可选参数
  Person(this.name, {int age}) : this.age = age ?? 10 {
  //在执行此大括号的代码时,对象已经初始化完毕了
  //必须保证在执行此大括号的代码之前,final修饰的name与age必须已经初始化
  //所以下面代码报错
  //this.age = 10;
  }

  //存在局限性 
  //Person(this.name, {this.age = 10});
}
重定向构造函数
main(List<String> args) {
  var p = Person("SF");
  print(p.age); //22
}

class Person {
  String name;
  int age;

  //调用自定义构造函数Person._internal
  Person(String name) : this._internal(name, 22);

  Person._internal(this.name, this.age);
}
常量构造函数
main(List<String> args) {
  const p1 = Person("liyanyan");
  const p2 = Person("liyanyan");
  
  //p1与p2是同一个对象
  print(identical(p1, p2)); 
}

class Person {
  final String name;

  const Person(this.name);
}
工厂构造函数
main(List<String> args) {

  final p1 = Person.withName("liyanyan");
  final p2 = Person.withName("liyanyan");

  print(identical(p1, p2)); //true
}

class Person {
  //对象属性
  String name;
  String color;

  //类属性
  static final Map<String, Person> _nameCache = {};
  static final Map<String, Person> _colorCache = {};

  //工厂构造函数
  //1.根据key值从缓存中获取对象,存在直接返回,不存在
  factory Person.withName(String name) {
    if (_nameCache.containsKey(name)) {
      return _nameCache[name];
    } else {
      final p = Person(name, "default");
      _nameCache[name] = p;
      return p;
    }
  }

  factory Person.withColor(String color) {
    if (_colorCache.containsKey(color)) {
      return _colorCache[color];
    } else {
      final p = Person("default", color);
      _colorCache[color] = p;
      return p;
    }
  }

  Person(this.name, this.color);
}
setter与getter方法
void main(List<String> args) {

  Person person4 = Person.init("cccc", age: 26);

  person4.setNamee("ssssss");
  print(person4.name);
  print(person4.getNamee());

  person4.name = "gggg";
  print(person4.name);
  print(person4.getNamee());
}

class Person {
  String name;
  int age;

  //其中age为可选参数
  Person.init(this.name, {this.age});

  //使用set,get关键字的setter,getter方法
  set setName(String name) {
    this.name = name;
  }

  String get getName {
    return this.name;
  }

  //不采用set,get关键字的setter,getter方法
  void setNamee(String name) {
    this.name = name;
  }

  String getNamee() {
    return this.name;
  }
}
上一篇下一篇

猜你喜欢

热点阅读