Dart 9-Day

面向对象编程

  • 面向对象编程(OOP)的三个基本特征是:
    • 封装、继承、多态
    • 封装:封装是对象和类概念的主要特性。
      • 封装,把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象调用, 而一部分属性和方法则隐藏。
    • 继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。
      • 继承是指这样一种能力:它可以使用现有类的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
    • 多态:允许将子类类型的指针赋值给父类类型的指针, 同一个函数调用会有不同的执行效果 。

Dart所有的东西都是对象,所有的对象都继承自Object类。

Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类

一个类通常由属性和方法组成。

void main() {
  List list = new List();
  list.isEmpty;
  list.add('香蕉');
  list.add('香蕉1');
  print(list);

  Map m = new Map();
  m["username"] = "张三";
  m.addAll({"age": 20});
  m.isEmpty;
  print(m);

  Object a = 123;
  Object v = true;
  print(a);
  print(v);
}

Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类

class Person {
  String name = "张三";
  int age = 23;

  void getInfo() {
    print("$name----$age”); 
    print("${this.name}----${this.age}”); // 两种使用时一样的
  }

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

void main() {
  // 实例化 二种方式
  Person p1 = new Person();
  // var p1 = new Person(); 
  print(p1.name);

  p1.setInfo(28);
  p1.getInfo();
}

默认构造函数

class Person {
  String name = '张三';
  int age = 20;
  // 默认构造函数
  Person() {
    print('这是构造函数里面的内容  这个方法在实例化的时候触发');
  }
  void printInfo() {
    print("${this.name}----${this.age}");
  }
}

默认构造函数带参数

class Person {
  String name;
  int age;

  // 默认构造函数 带参数
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  // 默认构造函数的简写
  // Person(this.name, this.age);
  void printInfo() {
    print("${this.name}----${this.age}");
  }
}

void main() {
  Person p1 = new Person('张三', 20);
  p1.printInfo();

  Person p2 = new Person('李四', 25);
  p2.printInfo();
}

自定义构造函数

// dart里面构造函数可以写多个

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 printInfo() {
    print("${this.name}----${this.age}");
  }
}

void main() {
  var d = new DateTime.now(); // 实例化DateTime调用它的命名构造函数
  print(d);

  Person p1 = new Person('张三', 20); //默认实例化类的时候调用的是 默认构造函数
  Person p2 = new Person.now(); //命名构造函数
  Person p3 = new Person.setInfo('李四', 30);
  p3.printInfo();
}

类单独抽出模块

// lib/Person.dart

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 printInfo() {
    print("${this.name}----${this.age}");
  }
}
import 'lib/Person.dart';

void main(){
  Person p1=new Person.setInfo('李四1',30);
  p1.printInfo();
}

私有属性、方法定义

  • Dart和其他面向对象语言不一样,Data中没有 public private protected这些访问修饰符合
  • 但是我们可以使用_把一个属性或者方法定义成私有。
// lib/Animal.dart

class Animal {
  String _name; //私有属性
  int age;
  //默认构造函数的简写
  Animal(this._name, this.age);
  void printInfo() {
    print("${this._name}----${this.age}");
  }
  String getName() {
    return this._name;
  }
  void _run() {
    print('这是一个私有方法');
  }
  execRun() {
    this._run(); //类里面方法的相互调用
  }
}

import 'lib/Animal.dart';

void main() {
  Animal a = new Animal('小狗', 3);
  print(a.getName());
  a.execRun(); //间接的调用私有方法
}

get 和 set 修饰符

// 正常方法调用
class Rect {
  num height;
  num width;
  Rect(this.height, this.width);
  area() {
    return this.height * this.width;
  }
}

void main() {
  Rect r = new Rect(10, 4);
  print("面积:${r.area()}");
}

// get修饰符
class Rect {
  num height;
  num width;
  Rect(this.height, this.width);
  get area {
    return this.height * this.width;
  }
}

void main() {
  Rect r = new Rect(10, 2);
  print("面积:${r.area}"); // 注意调用直接通过访问属性的方式访问area
}

// set修饰符
class Rect {
  num height;
  num width;

  Rect(this.height, this.width);
  get area {
    return this.height * this.width;
  }

  set areaHeight(value) {
    this.height = value;
  }
}

void main() {
  Rect r = new Rect(10, 4);
  r.areaHeight = 6;
  print(r.area);
}

初始化实例变量

  • Dart中我们也可以在构造函数体运行之前初始化实例变量
class Rect {
  int height;
  int width;
  Rect(): height = 2,width = 10 {
    print("${this.height}---${this.width}");
  }
  getArea() {
    return this.height * this.width;
  }
}

void main() {
  Rect r = new Rect();
  print(r.getArea());
}

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.icon-default.png?t=M0H8https://serious-lose.notion.site/Dart-9-Day-64d218e3844f44898a25e1bde356304a 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值