dart面向对象编程(二)进阶篇

7-2继承

Person.dart

class Person {
  String name;
  int age;
  String birth;
  bool get isAdult => age > 18;
  void run() {
    print('person run....');
  }
}

class_extention.dart

import 'person.dart';

void main() {
  var student = new Student();
  student.study();
}

// 继承 可以访问继承对象中 可见的属性 和方法
class Student extends Person {
  void study() {
    print('student study...');
  }
}

7-3继承中的构造方法

// 子类的构造方法 默认会调用父类中 无名无参的构造方法
// 如果父类没有无名无参的构造方法 则需要先是调用父类的构造方法
void main() {
  var student = new Student('Tom');
  // 获取父类中的名称
  print(student.name);
}

class Person {
  String name;
  // 无名无参的构造方法
  // Person(){
  //   print('person');
  // }
  // 无名有参
  Person(this.name);
  // 有名有参
  Person.withName(this.name);
}

class Student extends Person {
  int age;
  final String gender;

  // 子类调用父类的构造方法默认
  // Student(String name):super(name);
  // 子类调用父类的构造方法有名称
  // Student(String name):super.withName(name);
  // 初始化列表在构造方法前执行
  Student(String name, String g)
      : gender = g,
        super.withName(name);
}

7-4抽象类

import 'dart:io';

import '../chapter6/baject_op.dart';

void main() {
  var person = new Student();
  person.run();
}

// 抽象类不能够被实例化 抽象方法不用使用abstract修饰 无实现
// 抽象类可以没有抽象方法
abstract class Person {
  void run();
}

class Student extends Person {
  @override
  void run() {
    print('run');
  }
}

7-5接口

void main() {}

class Person {
  String name;
  int get age => 18;
  void run() {
    print('person run');
  }
}

// 在dart中 类也是接口
// 如果是服用已有类的实现 使用继承 如果使用已有类的外在行为使用接口
// 所有的类都可以当做接口使用 建议使用抽象类作为接口
class Student implements Person {
  @override
  String name;

  @override
  int get age => 15;

  @override
  void run() {}
}

7-6Mixins

void main() {
  var d = new D();
  d.a();
}

class A {
  void a() {
    print('aaaa');
  }
}

class B {
  void b() {
    print('bbbb');
  }
}

class C {
  void c() {
    print('cccc');
  }
}

// 使用mixins实现多继承 语法:lass D extends A with B,C
// B和C他也被称为mixins
// abc类都有a方法的话 会调用最后一个类中的a方法
// 作为 mixins的类不能有显示声明构造方法
// 作为mixins的类只能继承自object(不能继承已经有继承的类)
class D extends A with B, C {}

7-7操作符覆写

import '../chapter6/baject_op.dart';

void main() {
  var person1 = new Person(18);
  var person2 = new Person(20);
  print(person1 > person2);
}

class Person {
  int age;
  Person(this.age);
  // 复写操作符
  bool operator >(Person person) {
    return this.age > person.age;
  }
}

8-1枚举

// const spring=0;
// const summer=1;
// const autumn=2;
// const winter=3;
void main() {
  var currentseason = Season.spring;
  print(currentseason.index);
  switch (currentseason) {
    // 枚举有index属性
    // 不能指定index
    // 不能添加方法
    case Season.spring:
      print('1-3月');
      break;
    case Season.summer:
      print('4-6月');
      break;
    case Season.autumn:
      print('7-9月');
      break;
    case Season.winter:
      print('10-12月');
      break;
  }
}

// 枚举 是一种数据类型
enum Season { spring, summer, autumn, winter }

8-2泛型

void main() {
  // 泛型可以限制参数类型new List();
  // 使用泛型可以避免代码重复
  var list = new List();
  list.add('1');
  // list.add(1);
}

你可能感兴趣的:(dart)