美文网首页
Dart中的面向对象

Dart中的面向对象

作者: 刘铁崧 | 来源:发表于2020-10-23 10:26 被阅读0次
  • 默认情况相爱所有的类都继承自Object类

1.类的定义 & 构造函数

class Test{
  String value1;
  String value2;
  Test(this.value1,{this.value2});// zvalue2是可选参数
  // 使用命名构造函数
  Test.createWithValue1AndValue2(this.value1,this.value2);
  // 通过map构造
  Test.fromMap(Map<String,dynamic>map){
    this.value1 = map['value1'];
    this.value2 = map['value2'];
  }
  @override
  String toString(){
    return "$value1 $value2";
  }
}
// 创建
var test = Test.createWithValue1AndValue2("cy","job");
var test1 = Test.fromMap({
  "value1":"test1",
  "value2":"test2"
});

2.类的初始化列表

class Test{
  final String name;
  final String age;
  final String job;
  Test(this.name):age = 10{
    // 执行这里代码则代表Test对象已经初始化完毕
  }
// 如果age是可选值则可以如下
  Test(this.name,{int age},{string job}):thist.age = age ?? 10,this.job = job ?? "student"{// 判断初始化时是否给age赋值,如果没有赋值则给age赋默认值10
    
  }
}

3. 构造函数的重定向

一个类中有两个构造函数,可以调用其他构造函数实现重定向效果

class Test{
  String name;
  int id;
  Test(String name):this._internal(name,0);
  Test._internal(this.name,this.id);
}
var test = Test("cy");
print(test.age);// = > 0

4.常量构造函数

使用const函数进行修饰

class Test{
  final String name;
  const Test(this.name);
}
const test1 = Test("test1");
const test2 = Test("test1");
可以通过identical(test1,test2)进行对比会发现两个对象实际上指向同一内存空间 ->dart优化

5. 工厂构造函数

普通构造函数会默认返回创造出来的对象,不需要写return进行返回
工厂构造函数需要自己手动返回一个对象

常量构造函数一般情况下在类中只有一个,无法满足下列需求:
创建对象时,如果name相同返回对象是同一个对象,job相同返回对象也是同一个

class Test{
  String name;
  String job;
  static final Map<String,Person> _nameCache = {};
  static final Map<String,Person> _jobCache = {};
  Test(this.name,this.job);// 必须要手动实现构造函数
  factory Test.createWithName(String name){
    if(_nameCache.containsKey(name)){// 判断缓存中是否已经存在
      return _nameCache[name];//返回缓存数据
    }
    else{
      final test = Test(name,"默认值");
      _nameCache[name] = test;
      return test;
    }
  }
  factory Test.createWithJob(String job){
    if(_jobCache.containsKey(job)){// 判断缓存中是否已经存在
      return _jobCache[job];//返回缓存数据
    }
    else{
      final test = Test("默认值",job);
      _jobCache[job] = test;
      return test;
    }
  }
}
final test1 = Test.createWithName("cy");
final test12 = Test.createWithName("cy");
identical(test1,test2);
final test1 = Test.createWithJob("job");
final test12 = Test.createWithJob("job");
identical(test1,test2);
  • 工厂构造函数:可以手动返回对象(普通的构造函数不可以)

6. 类的setter和getter

class Test{
  String name;
  // setter
  set setName(String name){
    this.name = name;
  }
  // getter
  String get getName{
    return name;
  }

//箭头函数写法
  set setName(String name) => this.name = name;
  String get getName => name;
}

7. 类中的继承

dart中不支持多继承,只有单继承

class Animal{
  int age;
  Animal(this.age);
}
class Dog extends Animal{
  String name;
  Person(this.name,int age):super(age);
}

8. 抽象类

可以只放类没有实现,但是抽象类不可以实例化

abstract class Test{
  int testFunc1();
  void testFunc2(){
    return "方法二";
  }
}
继承者自抽象类后,必须实现抽象类的抽象方法
class subTest extends Test{
  @override
  void testFunc1(){
    return 10;
  }
}

抽象类不可以实例化,但是可以哦通过工厂构造函数实现实例化效果

abstract class Test{
  int testFunc1();
  void testFunc2(){
    return "方法二";
  }
  factory Test(){
    return subTest;//返回一个子类
  }
}
class subTest extends Test{
  @override
  void testFunc1(){
    return 10;
  }
}

final test = Test();

9.隐式接口

class Ablities{
  void cooking(){}
}
class Car{
  void runing(){}
}

class Person implements Alities,Car{
  //当一个类当做接口使用时,实现这个接口的类必须实现这个接口中的所有方法
// 不可以看调用supper
  @override
  void cooking(){}
  @override
  void running(){}
 }

10.mixin混入

class Person{
  void eating{}
}
mixin Women{
  void babying{}
}
mixin Writer{
  void writing{}
}

class CollegeStudent extends Person with Women,Writer{
  @override
  void eating(){
    super.eating90;
  }
}
final student = CollegeStudent();
student.babying();
student.writing();

11.类属性和类方法

class Person{
  String name;//成员变量
  static String parent;//静态属性(类属性)
  // 对象方法
  void eating(){
    print("eating");
  }
  // 静态方法(类方法)
  static void running(){
    print("快跑");  
  }
}
调用
Person.running();

相关文章

  • Dart语法 -- [06 - 类和对象]

    Dart是一个面向对象的语言,面向对象中非常重要的概念就是类,类产生了对象。 1.1. 类的定义 在Dart中,定...

  • Flutter(六) Dart语言基础-面向对象特性

    Dart是一个面向对象的语言,面向对象中非常重要的概念就是类,类产生了对象。今天,我们就具体来学习Dart 中重要...

  • Flutter 代码规范整理

    Dart 语法简介 Flutter是使用Dart语言开发的。Dart语言是基于类的纯面向对象语言。Dart 中的所...

  • Dart中的面向对象

    声明一个类 使用class关键字, 声明一个类 类的属性和方法 1.属性会自动生成getter和setter方法,...

  • Dart中的面向对象

    默认情况相爱所有的类都继承自Object类 1.类的定义 & 构造函数 2.类的初始化列表 3. 构造函数的重定...

  • Dart 类的私有方法&私有属性

    Dart和其他面向对象语言不一样,Dart中没有,public private protected这些访问修...

  • Dart 面向对象 中(三)

    继承 使用关键字 extends 继承一个类 子类会继承基类(父类)可见属性以及方法,没有继承父类的构造方法 子类...

  • 2019-09-20: 九: Flutter之Dart第六节(类

    九: Flutter之Dart第六节(类和对象)? Dart 是一个面向对象的语言、面向对象中非常重要的概念就是类...

  • 基础学习

    1.第一个世界级程序 Dart面向对象编程 Dart是一种面向对象的语言。面向对象是一种遵循真实世界建模的软件开发...

  • Dart--公有与私有

    Dart和其他面向对象语言不一样,在Dart中没有public、private、protected这些访问修饰符。...

网友评论

      本文标题:Dart中的面向对象

      本文链接:https://www.haomeiwen.com/subject/eqopmktx.html