• dart中类详细讲解


    dart是一门面向对象的语言

    dart是一门实用类和单继承的面向对象的语言
    在dart中所有的对象都是类的实例。
    所有的类都是Object的子类
    类都是有属性和方法组成的
    

    定义一个类

    在dart中,我们可以通过关键字class来定义类
    类名通常首字母是你大写的。采用的是大驼峰的方式。
    如果我们定的是函数或者方法。我们首字母是小写的;采用小驼峰的方式
    我们刚刚说了:类通常是由属性和方法组成的。下面我们就实现一个类
    

    实现一个简单的类

    class PersonIno {
      // 类中的属性
      String name = '林漾';
      int age = 30;
      // 类中的方法
      likes() {
        print('喜欢逛街');
      }
    
      // 访问类中的属性
      info() {
        // 直接访问属性
        print('我叫 $name,今年$age');
    
        // 通过this的来访问属性
        print('我叫 ${this.name},今年${this.age}');
      }
    }
    

    使用类之前进行实例化

    void main() {
      //实例化
      var p = new PersonIno();
      //调用类中的方法
      p.info();
      print(p.name);
    
      // 我们也可以声明这个p的类型哈;PersonIno类型
      PersonIno p1 = new PersonIno();
    }
    

    dart中的构造函数

    class PersonIno {
      // 类中的属性
      String name = '林漾';
      int age = 30;
    
      // 构造函数的名称和类型相同
      PersonIno() {
        print('我是构造函数,在实例化的时候就会被触发');
      }
    
      // 类中的方法
      likes() {
        print('喜欢逛街');
      }
    
      // 访问类中的属性
      info() {
        // 直接访问属性
        print('我叫 $name,今年$age');
    
        // 通过this的来访问属性
        print('我叫 ${this.name},今年${this.age}');
      }
    }
    

    使用构造函数初始化值

    我们现在的这个PersonIno类;
    只能够输出一个人的信息和年龄
    如果我们需要输出张三 李四  王五....
    很多人的信息怎么办??
    这个时候我们就可以使用构造函数哈!
    
    void main() {
      //实例化
      var p = new PersonIno('李四', 20);
      p.info();
      
      // 类是可以被多次实例化的
      var p1 = new PersonIno('王五', 25);
      p1.info();
    }
    
    class PersonIno {
      // 类中的属性
      String name;
      int age;
    
      // 构造函数的名称和类型相同
      PersonIno(String name, int age) {
        this.name = name;
        this.age = age;
      }
    
      // 访问类中的属性
      info() {
        // 通过this的来访问属性
        print('我叫 ${this.name},今年${this.age}');
      }
    }
    
    

    简写dart中的构造函数

      // 构造函数的简写方式
      PersonIno(this.name, this.age);
    
      // 与上面的相同
      PersonIno(String name, int age) {
      this.name = name;
      this.age = age;
    }
    

    命名构造函数。

    void main() {
      //实例化
      var p = new PersonIno('李四', 20);
    }
    
    class PersonIno {
      // 类中的属性
      String name;
      int age;
    
      // 构造函数的简写方式
      PersonIno(this.name, this.age);
      PersonIno.myFun() {
        print('我是命名的构造函数');
      }
    }
    
    我们都知道在实例化的时候,会默认触发【构造函数】。
    但是并不会去触发【命名构造函数】哈
    如何去触发【命名构造函数呢】
    //这样就会触发默认的构造函数了
    var p = new PersonIno.myFun();
    
    一个类中只能有一个构造构造函数。
    但是可以有多个构造函数
    

    命名构造函数也可以初始化值

    void main() {
      //实例化
      var p = new PersonIno.myFun('余声声', 22);
      p.info();
    }
    
    class PersonIno {
      // 类中的属性
      String name;
      int age;
    
      // 构造函数的简写方式
      PersonIno(this.name, this.age);
      PersonIno.myFun(this.name, this.age);
      // 访问类中的属性
      info() {
        // 通过this的来访问属性
        print('我叫 ${this.name},今年${this.age}');
      }
    }
    

    将类抽离出去

    在实际的开发中,我们可能会有很多的类。
    这样会文件越来越大。导致维护麻烦
    这个时候,我们就需要将类抽离出去
    那么,如何将类抽离出去呢??
    
    在项目的根目录下创建一个文件夹lib.
    将类放入这个文件夹下哈
    文件名【PersonIno】和类名【PersonIno】相同
    
    import 'lib/PersonIno.dart';
    void main() {
      //实例化
      var p = new PersonIno.myFun('余声声', 22);
      p.info();
    }
    

    私有的方法和属性

    dart和其他的面向对象的语言不一样。
    dart中没有public private  protected这些访问修饰符
    但是我们可以使用_把一个属性或者方法定义成为一个私有的。
    需要注意的是:
    如果你在属性或者方法前面添加"_"在同一个文件送仍然是可以访问的【1】
    但是如果是单独抽离出去的文件在属性和方法前面添加“_"就不可以访问【2】
    

    举个例子【1】

    void main() {
      var p = new PersonInfo('唐三', 18);
      print(p._age); //输出18是可以访问的
    }
    
    class PersonInfo {
      String name;
      int _age; //虽然添加了"_"表示私有,但是在同一个文件中仍然可以访问
      PersonInfo(this.name, this._age);
    }
    

    例子【2】 lib目录下的 PersonInfo 类文件PersonInfo.dart

    class PersonIno {
      // 类中的属性
      String _name;
      int age;
    
      // 构造函数的简写方式
      PersonIno(this._name, this.age);
      // 访问类中的属性
      info() {
        // 通过this的来访问属性
        print('我叫 ${this._name},今年${this.age}');
      }
    }
    

    这个时候就会出现访问报错

    import 'lib/PersonIno.dart';
    void main() {
      var p = new PersonIno('唐三', 18);
      print(p._name);
    }
    
    

    求两个数字的和

    void main() {
      Sun c = new Sun(10, 20);
      print(c.backSum());
    }
    
    class Sun {
      num a;
      num b;
      Sun(this.a, this.b);
      backSum() {
        return this.a + this.b;
      }
    }
    

    使用getter求两个数字的和

    void main() {
      Sun c = new Sun(10, 20);
      print(c.backSum); //直接访问属性的方式
    }
    
    class Sun {
      num a;
      num b;
      Sun(this.a, this.b);
      // 使用getter去掉小括号
      get backSum{
        return this.a + this.b;
      }
    }
    

    setter方法的使用

    void main() {
      Sun c = new Sun(10, 20);
      c.restateA = 100; //重新设置一个值
      print(c.backSum); //直接访问属性的方式 返回120
    }
    
    class Sun {
      num a;
      num b;
      Sun(this.a, this.b);
      // 使用getter去掉小括号
      get backSum {
        return this.a + this.b;
      }
    
      // setter的使用方法,
      set restateA(value) {
        this.a = value;
      }
    }
    
    作者:流年少年
    出处:https://www.cnblogs.com/ishoulgodo/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Pandas Dict到DataFrame Series到DataFrame 转换
    MySQL锁和事务
    MySQl创建用户和授权,mysquldump
    MySQL索引
    pymysql模块
    Navicat下载安装
    MySQL多表查询
    学习目录
    MySQL单表查询
    MySQL逻辑查询语句的执行顺序
  • 原文地址:https://www.cnblogs.com/ishoulgodo/p/15086459.html
Copyright © 2020-2023  润新知