Dart 类

//不可变

class ImmutabelPoint {

  final int x;

  final int y;

  //常量构造方法

  const ImmutabelPoint(this.x, this.y);

}

class Point {

  //使用 _ 是私有的

  int _x;

  int y;

  //方法不能重载

  Point(this._x, this.y);

  //命名构造方法

  Point.X(this._x);

  //参数初始化列表使用 :

  Point.fromMap(Map map)

      : _x = map["x"],

        y = map["y"];

  //这个跟kotlin 一样

  Point.from() : this(1, 1);

}

class _P {}

void main(){

  main2();

}

void main1() {

  // var p = Point(1,1);

  // p.y;

  //使用的const 创建的对象,传递的参数也一样,是同一个对象

  var p1 = const ImmutabelPoint(1, 1);

  var p2 = const ImmutabelPoint(1, 1);

  print(p1 == p2);

  print(p1.hashCode == p2.hashCode);

}

//工厂构造方法 加 单例实现

class Manager {

  static Manager _instance;

  factory Manager.getInstance() {

    _instance ??= Manager._newInstance();

    return _instance;

  }

  //static 表现与 factory一样 但是返回值要确定 Manager

  static Manager get() {

    return Manager._newInstance();

  }

  //这样不能实现单例

  // Manager();

  //使用命名构造方法 加 _ 的形式构造私有构造方法

  Manager._newInstance();

}

//get set

class getSet {

  int _x;

  int y;

  //因为有隐形 get x ,不能进行重写

  // int get x =>x + 10;

  //只能通过这种转换的方式进行

  int get x => _x;

  set x(int x) => _x = x;

  int get yy => y;

  set yy(int yy) => y = yy;

}

//操作符重载

class Operators {

  int x;

  int y;

  //返回值,随意

  Operators operator +(Operators operator) {

    var op = Operators();

    op.x = x + operator.x;

    op.y = y + operator.y;

    return op;

  }

  String operator -(String string) {

    return "";

  }

}

//抽象类

abstract class Parent {

  void parent(); //抽象方法不能写 abstract

}

//单继承,所有的类都可以是接口,进行实现

class Child extends Parent {

  @override

  void parent() {}

}

//实现

class Child2 implements Child {

  @override

  void parent() {}

  //可以使用  Child2 child = Child2();

  // child() == child.call();

  void call() {}

}

//混合 mixin

void main2() {

  var c = C();

  //这个方法是哪个类的呢

  //从后往前找  B,A

  c.a();

  c.b();

  //先找自己的,找不到后,从后往前找

  //混入类时,先混入A的所有方法,再混入B的方法的时把与A重合的方法顶替了

  c.c();

}

//被混入的类不能有构造方法

class A {

  void a() {}

  void c(){

    print("A 中的 C 方法");

  }

}

class B {

  void a(){}

  void b() {}

  void c(){

    print("B 中的 C 方法");

  }

}

class C with A, B {

  //重写了B中的c()方法

  void c() {

    super.c();

    print("C 中的 C 方法");

  }

}

//混合 D没有自己的方法与属性

class D = Object with A, B;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类概述 普通类变量实例变量(创建对象后,使用 对象.变量名 调用)静态变量(用static修饰,使用 类...
    小懒豆阅读 3,452评论 0 0
  • 1、this 使用this.propertyName,快捷属性赋值 class MyColor { int re...
    付昕乐阅读 2,662评论 0 0
  • 转载自://www.greatytc.com/p/4b3f68338efd 注意:跟Java等很多语言不...
    买火柴的大叔阅读 5,709评论 2 1
  • ✨✨✨✨✨ 魏什么_多喝水 Flutter 之路 声明: 创建实例 构造函数 默认构造函数默认构造函数,如果类没有...
    态度哥阅读 2,578评论 0 0
  • 前文链接: Dart简介 Dart语法(上) 内容: 函数(方法)函数定义及各类函数;函数参数;闭包 面向对象定义...
    玉圣阅读 7,301评论 0 2