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源代码持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容