13 dart 类(1)

1.类的引入

什么是类?

类是一种蓝图,或者说是一种模板,可能这样说大家会有点懵,接下来我举几个例子:

狗是一种类,人是一种类,汽车也是一种类

还有一个概念,叫做对象(实例),结合对象,可能会帮你更好的了解类与对象是什么意思

拿刚刚说的狗举例,狗是一种类,而小狗就是一种实例对象,黄色的狗也是实例对象

不知道你是否发现了,这个类与对象的关系,可以类比于函数里面形参与实参的关系

形参是一种模板,类也是一种模板

实参是传入的实际参数,对象则是根据类创建出来的具体实例

那么为什么需要类?

因为如果没有类,如果有大量的方法,或者有大量的数据,

那么这些数据和方法就会混在一起,不方便管理,所以需要类来管理这些数据和方法。

那么接下来,正式进入dart中类的学习。

2.类(class)

//定义一个简单的类:
class Dog{

}

这里定义了一个最为简单的类,也是类的基本结构,开头使用class,然后名称一般使用驼峰命名法,后面接上一个大括号。

2.1 添加属性

目前看来,这个类是空的,接下来我们可以往其中添加一些属性:

class Dog{
  String name = "大黄";  //狗的名字
  String breed = "土狗";  //狗的品种
  int age = 3;  //狗的年龄
}

现在,看的出来这个狗有了三个初始属性,那么接下来,我们就可以添加方法(函数)啦

2.2 添加方法(函数)

方法是类中定义的函数,它们描述了对象的行为。

class Dog{
  String name = "大黄";  //狗的名字
  String breed = "土狗";  //狗的品种
  int age = 3;  //狗的年龄

  //方法
  void bark(){
    print("小狗$name在叫");
  }

  void eat(String food){
    print("小狗$name在吃$food");
  }

  void info(){
    print("小狗的名字是$name,小狗的品种是$breed,小狗的年龄是$age");
  }
}

这里我们添加了三个方法:bark,eat,info,后续都可以通过对对象的调用使用这些方法。这里值得注意的是,方法的内部可以直接调用类的属性。如bark中调用了Dog的属性name。

2.3 创建和使用对象

创建对象的过程叫做实例化。如何创建对象?如下:

class Dog{
  String name = "大黄";  //狗的名字
  String breed = "土狗";  //狗的品种
  int age = 3;  //狗的年龄

  //方法
  void bark(){
    print("小狗$name在叫");
  }

  void eat(String food){
    print("小狗$name在吃$food");
  }

  void info(){
    print("小狗的名字是$name,小狗的品种是$breed,小狗的年龄是$age");
  }
}

void main(){
  Dog dog1 = Dog();
  Dog dog2 = Dog();
  print(dog1.name);  //大黄
  print(dog2.name);  //大黄
  print(dog2.age);  //3
  print(dog2.age);  //3
}

在main方法中,dog1和dog2就是对象,他们都有着一样的方法(bark,eat,info)和一样的类给的属性(name,breed,age),通过打印的结果也可以看出。

2.4 修改属性与调用方法

class Dog{
  String name = "大黄";  //狗的名字
  String breed = "土狗";  //狗的品种
  int age = 3;  //狗的年龄

  //方法
  void bark(){
    print("小狗$name在叫");
  }

  void eat(String food){
    print("小狗$name在吃$food");
  }

  void info(){
    print("小狗的名字是$name,小狗的品种是$breed,小狗的年龄是$age");
  }
}

void main(){
  Dog dog1 = Dog();
  Dog dog2 = Dog();

  dog1.name = "小紫";
  dog1.age = 4;
  dog1.breed = "未知品种1";
  print(dog1.name); //小紫
  print(dog2.name); //大黄

  dog2.bark();
  dog2.eat("骨头");
}

如果想要修改对象的属性,可以直接进行修改,这里可以看出,对dog1的属性修改之后,打印出来的结果是修改之后的属性,当然,由于修改的是对象的属性,所以不会对另外一个对象的属性产生影响。

如果想要调用方法,参考dog2,可以看见调用方法也是很简单,注意格式以及是否需要传参即可。

2.5 构造函数初步

目前,我们在创建 Dog 对象时,它的属性都已经被我们在类定义里写死。如果我们想在创建对象的时候就指定它的属性值,该怎么办呢?这时候就需要构造函数。

构造函数是一个特殊的方法,它的名字必须和类名完全一样。它在创建对象时自动被调用,通常用来初始化对象的属性。

class Car {
  String ? brand; // 品牌
  String ? color; // 颜色
  int ? speed; // 速度
  // 构造函数,用于初始化对象的属性
  Car(String b, String c, int d){
    this.brand = b;
    this.color = c;
    this.speed = d;
    print("一个$brand的$color的汽车被制造出来了,最高速度可达$speed");
  }

  void start(){
    print("$color的$brand汽车正在启动");
  }
}

void main(){
  Car car1 = Car("宝马","红色",200);
  car1.start();
}

这里要注意的是,由于最新版的dart有空安全,非空类型的属性必须初始化。所以要么让属性非空,要么将属性标记为可空,这里的操作就是标记为可空。这里需要介绍下this关键字。

this 关键字: 在构造函数或方法内部,this 关键字指向当前对象实例。当参数名和属性名相同时,用 this.属性名 可以明确指定是类的实例属性。

那么在这里,很明显的,这里就是指向类的实例属性。对于这类情况,其实还有一种写法,更为的简便,如下:

class Car {
  String ? brand; // 品牌
  String ? color; // 颜色
  int ? speed; // 速度
  // 构造函数,用于初始化对象的属性
  Car(this.brand, this.color, this.speed){    //<----变化处
    print("一个$brand的$color的汽车被制造出来了,最高速度可达$speed");
  }

  void start(){
    print("$color的$brand汽车正在启动");
  }
}

void main(){
  Car car1 = Car("宝马","红色",200);
  car1.start();
}

可以看见,我们可以直接将this写进去,这样减少了代码行数,在一定程度上降低了编写代码的负担程度

那么今天就先到这里啦,祝大家天天开心!代码一遍就通!没有debug的烦恼!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值