美文网首页
Dart面向对象编程(一)

Dart面向对象编程(一)

作者: Yxjie | 来源:发表于2019-05-09 17:14 被阅读0次

    类与对象

    • 使用关键字class声明一个类
    • 使用关键字new创建一个对象,new可以省略
    • 所有对象都继承Object类

    属性与方法

    • 属性默认会生成setter和getter方法
    • 使用final声明的属性,只有getter方法
    • 属性和方法通过.来访问
    • 方法不能被重载 【与java区别,后面会提到mixins多继承也与java不同】
    • 使用_修饰的类,属性与方法为私有方法,作用域为当前library(库)
    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);
    
    }
    

    初始化列表

    • 初始化列表会在构造方法体执行之前执行
    • 使用逗号分隔初始化表达式
    • 常用语设置final变量的值
    //初始化列表方式赋值
      Person.withMap(map) : address = map["address"] {
        this.name = map['name'];
        this.age = map["age"];
      }
    

    静态成员

    • 使用关键字static实现类级别的变量和函数
    • 静态成员不可以访问非静态成员,非静态成员可以访问静态成员
    • 类中常量需要使用 static const 修饰(java中用static final修饰)

    对象操作符

    • 条件运算符?.(与Kotlin一样)
    • 类型转换 as (与Kotlin一样)
    • 是否制定类型:is is!
    • 级联操作..
    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()

    相关文章

      网友评论

          本文标题:Dart面向对象编程(一)

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