/**
* Dart之接口
* Dart中的接口没有interface关键字来修饰,而是普通的类或抽象类都可以作为接口被实现
* 同样使用implements来实现
*
* 但是Dart的接口有点奇怪,如果实现的内容是普通类,会将普通类和抽象类中的属性方法全部都要重写一遍。
* 而因为抽象类可以定义为抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方法,一般会使用抽象类。和Java一样 Dart只支持单继承 支持多接口的实现;但是Dart有个功能叫mixins 可以实现类似于多继承的功能。
*
* 建议使用抽象类定义接口。
*/
import 'dart:math';
/**
* 案例:
* 这里定义一个Db的抽象类
* 定义两个实现类来实现DB的接口
*/
class Person{
String id;
String _name;
String _sex;
int _age;
Person();
int get age => _age;
set age(int value) {
_age = value;
}
String get sex => _sex;
set sex(String value) {
_sex = value;
}
String get name => _name;
set name(String value) {
_name = value;
}
@override
String toString() {
return 'Person{id: $id, _name: $_name, _sex: $_sex, _age: $_age}';
}
}
abstract class Db{
/**
* 连接数据库
*/
bool connect(String url,String userName,String password);
/**
* 保存
*/
Person save(Person person);
/**
* 删除
*/
int delete(int id);
}
class MySql implements Db{
@override
bool connect(String url, String userName, String password) {
if(url=='www.baidu.com'&&userName=='mysql'&&password=='db'){
return true;
}
return false;
}
@override
Person save(Person person) {
return person;
}
@override
int delete(int id) {
return 1;
}
}
class MongoDb implements Db{
@override
bool connect(String url, String userName, String password) {
if(url=='www.baidu.com'&&userName=='mongodb'&&password=='db2'){
return true;
}
return false;
}
@override
int delete(int id) {
return 2;
}
@override
Person save(Person person) {
return person;
}
}
void main(){
MySql mySql = new MySql();
print('mysql->connect....'+mySql.connect('www.baidu.com', 'mysql', 'db').toString());
Person person = new Person();
person..age=1
..name='sql'
..sex='男'
..id=Random().nextInt(12).toString();
print('mysql->save....'+mySql.save(person).toString());
print('mysql->delete....'+mySql.delete(1).toString());
MongoDb mongoDb = new MongoDb();
print('mongoDb->connect....'+mongoDb.connect('www.baidu.com', 'mongodb', 'db2').toString());
Person person2 = new Person();
person2..age=2
..name='mongoDb'
..sex='未知'
..id=Random().nextInt(20).toString();
print('mongoDb->save....'+mongoDb.save(person2).toString());
print('mongoDb->delete....'+mongoDb.delete(1).toString());
}
Dart基础第十一篇:面向对象之接口
猜你喜欢
转载自blog.csdn.net/u013600907/article/details/99843199
今日推荐
周排行