Dart学习8、类的详解

面向对象编程(OOP)的三个基本特征

1、封装:封装是面向对象的特征之一,是对象和类概念的主要特性。
 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
2、继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
3、多态:多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

定义一个类

Dart所有的东西都是对象,所有的对象都继承于Object类
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
 一个类通常由属性和方法组成
class Person {
  String name = "AA";
  int age = 24;

  void getInfo(){
    print("$name------$age");
    //换种写法
    //print("${this.name}------${this.age}");
  }

  void setInfo(age){
    this.age = age;
  }
}

void main(List<String> args) {
  //实例化
  var person  = new Person();//Person person = new Person();
  print(person.name);
  person.getInfo();
  person.setInfo(27);
  person.getInfo();
}

构造函数:实例化类的时候自动触发的方法

注意:
因flutter2.0添加了Sound null safety空安全声明,目的是通过显式声明可能为null的变量,增加Dart语言的鲁棒性。
因为Dart语言变量可以存null或者具体的值,因此在日常的开发中可能因为忘记赋值或者变量延迟赋值,导致访问某个变量时为null,导致程序运行时抛出exception。
这个功能推出后,可以从源码级解决null异常导致的错误。
有两种写法:
(1)在类型声明后添加 "?" 以标识这个变量是可以为null的。
(2)在类型声明前添加 "late" 以标识这个变量在使用前一定要进行初始化。
class Person {
  String? name;
  int? age;

//构造函数
  // Person(String name, int age) {
  //   print("这是构造函数中的内容,实例化的时触发");
  //   this.name = name;
  //   this.age = age;
  // }
  //构造函数可简写
  Person(this.name,this.age);

  void getInfo() {
    print("${this.name}------${this.age}");
  }
}

void main(List<String> args) {
  //类可以实例化多次
  Person person1 = new Person("李四", 25);
  person1.getInfo();
  Person person2 = new Person("王二", 28);
  person2.getInfo();
}

命名构造函数

class Person {
  String? name;
  int? age;

  Person(this.name,this.age);

  Person.now(){
    print("我是命名构造函数");
  }

  Person.setInfo(String name,int age){
    this.name = name;
    this.age = age;
  }

  void getInfo() {
    print("${this.name}------${this.age}");
  }
}

void main(List<String> args) {
  //默认实例化类的时候调用的是 默认构造函数
  Person person = new Person("name", 23);
  Person person2 = new Person.now();//我是命名构造函数
  Person person3 = new Person.setInfo("麻子", 34);
  person3.getInfo();
}

方法和属性修饰符

Dart 和其他面向对象语言不一样,Dart中没有public、private、protected这些访问修饰符
但是可以使用_把一个属性或者方法定义成私有

单独新建一个类

class Animal {
  //私有属性,只能本类中访问
  String? _name;
  int? _age;

  Animal(this._name, this._age);

  void printInfo() {
    print("${this._name}------${this._age}");
  }

  //在新版本中一定要记得加上?允许可空哦
  String? getName() {
    return this._name;
  }

//私有方法,仅可在当前类访问
  _run(){
    print("私有方法");
  }

  exrcRun(){
    this._run();//类里面方法的互相调用
  }
}

访问新建类Animal

void main(List<String> args) {
  Animal animal = new Animal("小猫", 5);
  animal.printInfo();
  print(animal.getName());
  animal.exrcRun();
}

类中初始化列表

Dart中我们也可以在构造函数体运行之前初始化实例变量
class Rect{
  int? h;
  int? w;

  Rect():h = 11,w = 2{

  }

  getArea(){
    return this.h!*this.w!;
  }
}

void main(List<String> args) {
  Rect r = new Rect();
  print(r.getArea());//22
}

记录Dart学习,谢谢
一起讨论学习哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JMchen123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值