小菜鸡开始学习flutter之九

28 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

今日目标

今天的主要目标是学习了解Dart中的类、对象这一概念

面向对象编程

面向对象编程的三个基本特征: 封装、继承、多态
封装:封装是类和对象的主要特性,把客观事物粉装成抽象的类,并且把自己的部分属性和方法提供给其他对象
继承:面向对象编程(OOP)语言的一个主要功能就是“继承”,它可以使用现有类的功能,并且可以扩展这些功能
多态:允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的效果

Dart所有的东西都是对象,所有的对象都继承自Object类.
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
一个类通常由属性和方法组成

像List,Map,Set这些都是Dart内置好的类,那如何自定义一个类呢?

在Dart中定义一个类通过Class关键字来实现\

Tips:定义一个类的时候,首字母要大写

class Person {
    String name='你太有才了';
    int like=100;
    void sayHello(){
        print('$name----hello');
        
        print('${this.name}----hello1');
    }
}

如上我们就定义号了一个Person类,在使用这个类的时候要先进行实例化。

var p1 = new Person();

print(p1.name);

p1.sayHello();

image.png 像我们在实例化 list的时候可以指定一个类型,自定义的类实例化时也可以指定类型

List newlist = new List();
Person newPerson = new Person();

像js中一样我们也可以通过方法去修改实力里的一些属性

class Person {
    String name='你太有才了';
    int like=100;
    void sayHello(){
        print('$name----hello');
        
        print('${this.name}----hello1');
    }
    void setLike(int like){
        this.like = like;
    }
}

Person a = new Person();
a.setLike(1000);
print(a.like);

image.png

类的构造函数

是我们在实例化的时候自动触发的一个方法就叫构造函数
在dart中构造函数默认和类是同名的方法

class Person{
    Person(){
        print('构造函数触发');
    }
}

image.png

class Person{
    var name;
    var like;
    Person(name, like){
        this.name = name;
        this.like = like;
    }
   void sayHello(){
       print('${this.name}---hello, like: ${this.like}');
   }
}
Person p1 = new Person('你太有才了', 200);
p1.sayHello();

如上代码我们就在实例化的时候通过传参来设置Person里面的属性值
image.png 构造函数的简写方式:

class Person{
    Person(this.name, this.like);
}

在类里可以写多个命名函数

class Person{
    Person(this.name, this.like);
    Person.now(){
        print('这是一个命名函数');
    }
}

new Person.now();

image.png

类的单独抽离

通常项目中我们会定义很多类,如果写在同一个dart文件里就会很臃肿且变得不可维护,这个时候我们就可以把类单独抽离出来一个dart文件,在需要用到的放引入就可以了。
这样做的好处可以实现模块化和多人开发。

在Dart里面时没有类似public,private,protected这些修饰符的。
但是可以通过 _ 将一个属性或者方法定义成私有的。注意这个时候需要将类抽离成一个单独的文件,否则私有时不生效的。私有属性可以设定一些共有的方法来让外部访问到。

get&set

class Sum {
    var num1;
    var num2;
    Sum(this.num1, this.num2);
    int get getSum{
        return this.num1 + this.num2;
    }
    set setnum2 (int num) {
      this.num2 = num;
    }
}
Sum sum = new Sum(1,2);
print(sum.getSum);
sum.setnum2 = 3;
print(sum.getSum);

如上我们就使用到了get和set,要注意这里是直接通过属性来调用的而不是方法

image.png

类中的初始化列表

Dart中我们也可以在构造函数的体运行之前初始化实例变量

class Person{
    var name;
    var like;
    Person():name='你太有才了',like=12{}
}
print(new Person().name);

image.png

Ending

持续学习,加油,如有不对的地方还请指正,谢谢~~