Flutter(Dart)中extends 、 implements 、 with的用法与区别

1.关键字解析

  • extends:继承Class
  • with:混入Class
  • implements:实现Class
    这三种关系可以同时存在,但是有前后顺序:
    extends - with- implements
    extens在前,with在中间,implements最后

2.继承(extends)

Flutter中的继承和Java中的继承是一样的:
Flutter中的继承是单继承,只能继承一个Class,不能是多个,继承后子类重写或者调用父类的方法,也可以获取父类的属性等,在Java中只能是公开的,但Dart里面不存在公开跟私有属性,Dart里面一般而言如果是以下横线”_“开头的我们就把他认作是私有的,但是依旧是可以调用的

class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class C {
  c1() {}
}

class S extends A {
  @override
  a1() {
    return super.a1();
  }
}

class SS {
  ss() {
    S().a1();
    S()._aa();
  }
}

3.with(混入)

  • 混合的对象是类
  • 可以混合多个
    如果A类混入了B类,那么A就可以直接调用B里面的方法,且不需要实例化B,不需要B做单例,也不需要静态被调用的方法,还能混入多个类,这对方法复用带来的极大的便利性,破除了众多限制
class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class B2 {
  b2() {}
}

class S extends A with B, B2 {
  @override
  a1() {
    return super.a1();
  }

  @override
  b1() {
    return super.b1();
  }

}

class SS {
  ss() {
    S().a1();
    S()._aa();
    S().b1();
    S().b2();
  }
}

4.implements(实现)

这个跟Java中基本没有区别,需要注意的就是Dart中是没有接口这一说的,实现的也是Class

class A {
  a1() {
    _aa();
  }

  _aa() {}
}

class B {
  b1() {}
}

class B2 {
  b2() {}
}

class C1 {
  c1() {}
}

class C2 {
  c2() {}
}

class S extends A with B, B2 implements C1, C2 {
  @override
  a1() {
    return super.a1();
  }

  @override
  b1() {
    return super.b1();
  }

  @override
  b2() {
    return super.b2();
  }

  @override
  c1() {

  }

  @override
  c2() {
 
  }
}

class SS {
  ss() {
    S().a1();
    S()._aa();
    S().b1();
    S().b2();
    S().c1();
    S().c2();
  }
}

更多Flutter学习请移步

Flutter入门教学目录持续更新中

Github源代码持续更新中

你可能感兴趣的:(Flutter(Dart)中extends 、 implements 、 with的用法与区别)