Flutter笔记之Dart类对象

Dart语言中类和Java语言中都很类似,但是也有一些区别

1.类的定义和初始化

  • 默认或生成set/get方法
  • 使用final修饰的只有get方法
  • 属性和方法通过.来房访问
  • 方法不能被重载
  • Dart中可见性以库为单位,默认情况下一个Dart文件就是一个库
  • _用来表示私有性
class Student {
  String name;
  int age;
  final String adress;

  Student(names, age) {
    this.name = names;
    this.age = age;
  }

  void print_Info() {
    print("name=$name,age=$age");
  }
}
//初始化
  Student student = new Student("张一博", 26);
  student.name = "Tom";
  student.print_Info();

2.类计算属性

void main() {
  //创建对象设置属性
  Yuan yuan = new Yuan();
  yuan.height = 100;
  yuan.width = 20;
// 设置圆面积属性
  print(yuan.area);
  //设置圆width属性
  yuan.area = 100;
  print(yuan.width);
// 获取圆周长属性
  print(yuan.zhouchang)
  yuan.zhouchang = 100;

  print(yuan.width);
}

class Yuan {
  num width;
  num height;

  //计算属性 area 面积 属性
  num get area {
    return width * height;
  }

  //设置属性
  set area(value) {
    width = value / 5;
  }
  //计算属性 area 周长 属性
  num get zhouchang => (width + height) * 2;
  //计算属性 width 属性
  set zhouchang(value) => width = value / 2 - 20;

  int getAre() {
    return width * height;
  }
}

3.类的构造方法

Dart中类的构造和Java中构造不太一样,Dart中类的构造不能重载,必须通过特定方式来创建不同的构造方法。

/**
 * 构造方法创建注意
 *
 * 构造方法不能重载
 *
 */
class Person {
  String name;
  int age;
  final String adress;

  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  /**
   * 多个构造方法通过以下方式
   */
  Person.withName(String name) {
    this.name = name;
  }

  Person.withAge(int age) {
    this.age = age;
  }

  Person.withInfo(String name, int age) {
    this.name = name;
    this.age = age;
  }

  /**
   * final 属相通过可以通过以下构造方法赋值
   */
  Person.withAllInfo(this.name, this.age, this.adress);

  void printPersonInfo() {
    print("name=$name,age=$age");
  }
}

//对象创建
Person person=new Person.withAge(20);
Person person=new Person.withInfo("tom",20);
person.printPersonInfo();

除了普通的构造方法外还有一种工厂构造方法,工厂构造方法可以返回一个对象

/**
 * 工厂构造方法,可以返回一个对象
 */
class Looger {
  String name;
  static Map<String, Looger> cache = new Map();

  factory Looger(String name) {
    if (cache.containsKey(name)) {
      return cache[name];
    } else {
      Looger looger = new Looger._internal(name);
      cache[name] = looger;
      return looger;
    }
  }

  //私有构造方法
  Looger._internal(this.name);

  printInfo(msg) {
    print(msg);
  }
}


4.类对象操作符符号

  • ? 判断对象是否为空
  • as 对象转换
  • is 判断是否属于某个类型
  • … 级联调用,类似java中的build模式
class Man {
  String name;
  int age;

  Man(this.name, this.age);

  printManInfo() {
    print("name=$name,age=$age");
  }
}

//对象操作符号
//? 判断对象是否为空
  Man man;
  man?.printManInfo();

// as 对象转换

  var mans;
  mans = "hello";
  mans = new Man("tom", 20);
  (mans as Man).printManInfo();

  //is 判断是否属于某个类型

  if (mans is Man) {
    (mans as Man).printManInfo();
  }

  // .. 级联调用,类似java中的build模式

  Man manss = new Man("tom", 25);
  manss
    ..name = "zhang"
    ..age = 10
    ..printManInfo();
================================
name=tom,age=20
name=tom,age=20
name=zhang,age=10

5.类对象Call方法

编写call方法可以吧对象看作方法一样进行调用

class Man {
  String name;
  int age;

  Man(this.name, this.age);

  printManInfo() {
    print("name=$name,age=$age");
  }
  
  void call(){
    print("name=$name,age=$age");
  }
}

  Man man5=new Man("tom", 20);
  man5();
  ===================================
  name=tom,age=20
发布了100 篇原创文章 · 获赞 75 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/baidu_31956557/article/details/102767938