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毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

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

支付宝
微信
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
原文地址:https://www.cnblogs.com/ishoulgodo/p/15086459.html