How to define interfaces in Dart?

2019-04-18 15:55发布

In Java, I might have an interface IsSilly and one or more concrete types that implement it:

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
    }
}

What's the equivalent to this code in Dart?

After perusing the official docs on classes, it doesn't seem that Dart has a native interface type. So, how does the average Dartisan accomplish the interface segregation principle?

3条回答
小情绪 Triste *
2楼-- · 2019-04-18 16:21

In Dart there the concept of implicit interfaces.

Every class implicitly defines an interface containing all the instance members of the class and of any interfaces it implements. If you want to create a class A that supports class B’s API without inheriting B’s implementation, class A should implement the B interface.

A class implements one or more interfaces by declaring them in an implements clause and then providing the APIs required by the interfaces.

So your example can be translate in Dart like this :

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
  }
}
查看更多
beautiful°
3楼-- · 2019-04-18 16:29

In Dart, every class defines an implicit interface. You can use an abstract class to define an interface that cannot be instantiated:

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
    }

}
查看更多
一纸荒年 Trace。
4楼-- · 2019-04-18 16:35

The confusion usually is because doesn't exist the word "interface" like java and another languages. Class declarations are themselves interfaces in Dart.

In Dart every class defines an implicit interface like others says.So then... the key is: Classes should use the implements keyword to be able to use an interface.

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
  }
}
查看更多
登录 后发表回答