Dart面向对象编程(一)

2019-05-09  本文已影响0人  Yxjie

类与对象

属性与方法

void main() {
  var p = Person();
  p.name = "Tom";
  p.age = 22;
  p.work(); //name is Tom,age is 22,he is worker
}

class Person {
  String name;
  int age;

  //箭头函数以及插值表达式
  work() => print("name is \$name,age is \$age,he is worker");
//报错不能重载
//  work(String work){
//
//  }
}

计算属性

void main() {
  var rect = Rect();
  rect.width = 20;
  rect.height = 10;
  print(rect.area); //200

  rect.area=300;
  print(rect.width);//15
}

class Rect {
  num width, height;

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

  set area(value) {
    width = value / 20;
  }

  //面积方法
  getArea() => width * height;
}

构造方法

void main(){
  var p = Person("yxjie", 28, "your heart");

  var p2 =Person.withAddress("你的肺");
}

class Person{;
  String name;

  int age;

  final String address;//只能通过语法糖方式赋值

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

  //与上面等价
  Person(this.name,this.age,this.address);
  //定义多个构造方法
  Person.withAddress(this.address);
}

常量构造方法

void main(){
  var p = Person("Jerry", 16);
//  p.name="hhah";//报错
}
class Person{
  final String name;
  final int age;
  const Person(this.name,this.age);
}

工厂构造方法

class AndroidUtil{

  final String name;

  //工厂构造方法 特点返回一个对象实列
  factory AndroidUtil(String name){
    return AndroidUtil._innerConstruct(name);
  }

  AndroidUtil._innerConstruct(this.name);

}

初始化列表

//初始化列表方式赋值
  Person.withMap(map) : address = map["address"] {
    this.name = map['name'];
    this.age = map["age"];
  }

静态成员

对象操作符

void main() {
  var person;
  person?.work(); //不会运行
  var p;
  p = "";
  p = Person();
  (p as Person).work();
  
  if(p is Person){
    p.work();
  }
//级联操作
  var p1 = Person();
  p1
    ..name = "jerry"
    ..age = 16;
}
class Person {
  work() => print("work ...");
}

对象call方法

Dart中对象call方法类似于java中toString方法,区别在于Dart中call方法直接调用对象实列就行,java需要对象.toString()

上一篇 下一篇

猜你喜欢

热点阅读