如何在Dart中定义接口?

时间:2013-12-26 21:08:56

标签: api oop inheritance interface dart

在Java中,我可能有一个接口IsSilly和一个或多个实现它的具体类型:

public interface IsSilly {
    public void makePeopleLaugh();
}

public class Clown implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

public class Comedian implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

Dart中这段代码的等价物是什么?

在课程上仔细阅读官方docs后,Dart似乎没有本地interface类型。那么,普通的Dartisan如何实现界面隔离原则呢?

4 个答案:

答案 0 :(得分:30)

在Dart中有implicit interfaces的概念。

  

每个类都隐式定义一个接口,该接口包含该类的所有实例成员及其实现的任何接口。如果你想创建一个支持B类API的A类而不继承B的实现,那么A类应该实现B接口。

     

一个类通过在implements子句中声明它们然后提供接口所需的API来实现一个或多个接口。

所以你的例子可以像Dart一样翻译:

abstract class IsSilly {
  void makePeopleLaugh();
}

class Clown implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

答案 1 :(得分:6)

在Dart中,每个类都定义一个隐式接口。您可以使用抽象类来定义无法实例化的接口:

abstract class IsSilly {
    void makePeopleLaugh();
}

class Clown implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}

class Comedian implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}

答案 2 :(得分:1)

混乱的原因通常是因为不存在Java和其他语言这样的“接口”一词。类声明本身就是Dart中的接口。

在Dart中,每个类都像其他人一样定义了一个隐式接口。因此,关键是:类应使用Implements关键字才能使用接口。

abstract class IsSilly {
  void makePeopleLaugh();
}

//Abstract class
class Clown extends IsSilly {   
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

//Interface
class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

答案 3 :(得分:1)


abstract class ORMInterface {
  void fromJson(Map<String, dynamic> _map);
}

abstract class ORM implements ORMInterface {

  String collection = 'default';

  first(Map<String, dynamic> _map2) {
    print("Col $collection");
  }
}

class Person extends ORM {

  String collection = 'persons';

  fromJson(Map<String, dynamic> _map) {
    print("Here is mandatory");
  }
}