Flutter学习笔记: Dart语言值之面向对象class

4. Class的使用

所有代码均在github上github地址

1. 类的构造函数定义

类的构造函数本质也是函数,因此其定义方式和函数的定义套路是一样的,有具名参数函数和位置参数函数这两种,另外还包括使用dart语法糖的形式。

如果一个函数没有构造函数会怎么样?

如果不指定构造器的话,class会调用一个不带任何参数的默认构造器
该构造器没有任何传参,并且在继承父类构造器的时候不会传参
构造器不会被继承,当没有构造器,会调用默认的而不会继承父类的。

因此,如果继承了父类,父类构造函数中需要传参,而子类中没有使用构造函数,会报错!

还有一个注意点:

  • 感觉: 在类中调用变量的时候按照作用域网上找,所以定义this.num 和num应该都会找到实例变量定义的num变量

上面这个感觉不一定对,但是从很多代码上来看是这样的,后面要仔细研究下

1. 基本构造函数形式

其本质位置参数函数作为构造函数

class Point {
  // 定义函数内存在的变量和类型。
  num x;
  num y;
  num z = 0;

  // 函数的构造函数
  // 利用构造函数,利用传入参数对类进行初始化
  Point(num x, num y) {
    this.x = x;
    this.y = y;
  }
}

void main() {
    var p = Point(1, 2);
    p.x = 3;
    print(p.z); // 0
   	print(p.x); // 3
}
2. 利用具名参数函数构造函数
class Point4 {
  num x, y;

  Point4({num x, num y}) {
    this.x = x;
    this.y = y;
  }
}

void main() {
  var p4 = Point4(
    x: 1,
    y: 2
  );
  print('p4.x = ${p4.x}'); // 1
}
3. 利用dart自带语法糖简化位置函数构造函数的形式
class Point2 {
  num x, y;

  // dart提供的语法糖,将对应传入的值,赋值内内部对应的参数
  Point2(this.x, this.y);
}

void main() {
	var p2 = Point2(1, 2);
}

4. 使用冒号语法进行赋值
class Point3 {
  num x, y;
  double initDis;

  // 可以直接通过冒号的方式对this.x, this.y进行赋值
  Point3(x, y)
      : x = x,
        y = y,
        initDis = sqrt(x * x + y * y);
  // 其他方法定义
  // ......
}
6. 使用具名构造器

上面所有的构造器都是默认构造器,创建类的时候会默认执行构造器,但可能会有这种情况,希望同样的类,但是在不同场景下具有不同的构造函数方法,这样就需要一个具名构造器,可以对不同场景进行切换,对于相同的类进行定制化

继承具名构造器

具名构造器并不会被直接继承,默认调用的是父类中的默认构造器,因此,如果想要继承具名构造器,需要在子类中进行调用才行。

// 构造器是不会被继承的,所以父类的具名构造器也是不会被子类继承的
// 如果要使用父类的具名构造器,需要在子类上进行调用
class Point3 {
  num x, y;
  double initDis;

  // 可以直接通过冒号的方式对this.x, this.y进行赋值
  Point3(x, y)
      : x =
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值