在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如何实现界面隔离原则呢?
答案 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");
}
}