Dart学习笔记-面向对象编程

Posted 追到梦的魔术师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart学习笔记-面向对象编程相关的知识,希望对你有一定的参考价值。

一、继承、继承中的构造函数

  • 键字extends继承一个类
  • 子类会继承父类可见的属性和方法,不会继承构造方法
  • 子类能够复写父类的方法、getter和setter
  • 单继承
class Person 
  String name;
  int age;
  String _birthday;
  
  bool get isAdult => age > 18;
  
  void run()
    print("Person run...");
  


class Student extends Person
  
  @override
  bool get isAdult => age > 15;
  
  @override
  void run()
    print("Student run...");
  
  
  @override
  String toString()
    return("Student toString");
  
  
  void study()
    print("Student study...");
  

  • 继承中的构造方法
  • 子类的构造方法默认会调用父类无名无参的构造方法
  • 如果父类没有无名午餐的构造方法,则需要显示调用父类构造方法
  • 在构造方法参数后使用:显示调用父类构造方法
class Person 
  String name;
  int age;
  String _birthday;
  
  bool get isAdult => age > 18;
  
  Person(this.name);
  Person.withName(this.name);
  
  void run()
    print("Person run...");
  


class Student extends Person
  
  Student(String name) : super(name);



  • 构造方法执行顺序
  • 父类的构造方法在子类构造方法体开始执行的位置调用
  • 如果有初始化列表,初始化列表会在父类构造方法之前执行
class Person 
  String name;
  int age;
  bool get isAdult => age > 18;
  
  Person(this.name);
  Person.withName(this.name);
  
  void run()
    print("Person run...");
  


class Student extends Person
  final String gender;
  Student(String name,String g) : gender = g,super(name);

二、抽象类

  • 抽象类使用abstract标识,不能直接被实例化
  • 抽象方法不用abstract修饰,无实现
  • 抽象类可以没有抽象方法
  • 有抽象方法的类一定得声明为抽象类
abstract class Person
  void run();


class Student extends Person
  @override
  void run()
    print("run...");
  

三、接口

  • 类和接口是统一的,类就是接口
  • 每个类都隐式定义了一个包含所有实例成员的接口
  • 如果是复用已有类的实现,使用继承(extends)
  • 如果只是使用已有类的外在行为,使用接口(implements)
class Person 
  String name;
  int age;  
  void run()
    print("Person run...");
  



class Student implements Person
  @override
  String name;
  @override
  int age; 
  @override
  void run()
    print("run...");
  

建议使用抽象类作为接口

abstract class Person
  void run();


class Student implements Person
  @override
  void run()
    print("run...");
  

四、Mixins,操作符的覆写

1、Mixins

  • Mixins类似于多继承,是在多类继承中重用一个类代码的方式,Mixin不能直接使用,必须配合继承
  • 作为Mixin的类不能有显示声明构造函数
  • 作为Mixin的类智能继承自Object
  • 使用关键字with连接一个或多个mixin

顺序问题

  • 如果2个或多个超类拥有相同签名的A方法,那么子类会以继承的最后一个超类中的A方法为准。
  • 若子类也重写了改方法也已子类为准
  • 优先级顺序是:子类自己实现>Mixin>继承,如果有多个Mixin,则已最后的Mixin为主
class A 
  String getMessage() => 'A';

 
class B 
  String getMessage() => 'B';

 
class P 
  String getMessage() => 'P';

 
class AB extends P with A, B 
 
class BA extends P with B, A 
 
class C extends P with B, A 
  String getMessage() => 'C'; //优先级最高的是在具体类中的方法。

 
//关系连接:implements实现、extends继承、with混入
class CC extends P with B implements A 
  
 
  var cc = CC();
  print(cc.getMessage());//=>B

使用mixin进行类组合

abstract class Person
  String name;
  int age;
  void run();



class Animal
  void eat()
    print("eat...");
  


//mixin on的使用,使用这个mixin的class必须继承自Animal
mixin Boy on Animal implements  Person
  @override
  String name;
  @override
  int age;
  @override
  void run()
    print("Person run...");
  
  
  void playBall()
    print("playBall...");
  


mixin Girle implements  Person 
  @override
  String name;
  @override
  int age;
  @override
  void run()
    print("Person run...");
  
  
  void dance()
    print("dance...");
  



class Cat
  void eat()
    print("eat...");
  


此时我们可以使用快捷方式组合class

class A = Cat with Girle;
var a = A();
a.run();

2、操作符的覆写

  • 操作符覆写
  • 覆写需要在类中定义
返回类型 operator操作符(参数1、参数2.....
     实现体
     return 返回值

class Person 
  int age;
  bool operator > (Person person)
    return this.age > person.age;
  

  var p1= Person();
  p1.age = 18;
  var p2= Person();
  p2.age = 13;
  
  print(p1>p2);//ture

以上是关于Dart学习笔记-面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

Flutter学习-dart:dart类和对象

python学习笔记:面向对象编程类

python学习笔记:面向对象编程类

python学习笔记:面向对象编程类

python学习笔记8--面向对象编程

python学习笔记(十九)面向对象编程,类