Dart语言基础学习之Class 类
2019-02-03 本文已影响5人
iCloudEnd
Class
类是面向对象的基础,让我从了解类开始深入Dart语言的世界。本文将从下面几个方面介绍:
- 类的定义
- 抽象类(接口)
Dart语言的定义
Dart是一种单继承,基于类,面向对象的语言。它在类和接口机制方面与Java和C#有许多相似之处。下面是个类的Demo:
class User {
String _forename;
String get forename => _forename;
set forename(value) => _forename = value;
String surname;
String getFullName(){
return "$forename $surname";
}
}
main(){
User user = new User();
user.forename = "Alice";
user.surname = "Smith";
String fullName= user.getFullName();
print(fullName);
}
dartpad 运行效果
Alice Smith
demo注释版
class User { //类名称
String _forename; //私有属性
String get forename => _forename; // 公开getter方法,可以访问私有属性
set forename(value) => _forename = value;// 公开setter方法
String surname; //公有属性
String getFullName() //返回forename和surname 字符串的公有函数
{
return "$forename $surname"; //Dart字符串格式化方式
}
}
main(){
User user = new User();//创建对象
user.forename = "Alice";//给对象forname属性赋值
user.surname = "Smith";// 给对象surname属性赋值
String fullName= user.getFullName();//调用对象方法
print(fullName); // 输出
}
Dart 类的继承
Dart是一种单继承的面向对象语言,下面是继承的demo
class User {//类名称
String _forename; //私有属性
String get forename => _forename; // 公开getter方法,可以访问私有属性
set forename(value) => _forename = value; // 公开setter方法
String surname; //公有属性
String getFullName() //返回forename和surname 字符串的公有函数
{
return "$forename $surname"; //Dart字符串格式化方式
}
bool isLogin;//是否登录 true or false
}
class AuthService {
User auth(String username, String password) {
return null;
}
}
class MockAuthService extends AuthService {
User auth(String username, String password) {
var user = new User();
user.forename = 'testForename';
user.surname = 'testSurname';
user.isLogin=false;
return user;
}
}
class YourAuthService extends AuthService {
User auth(String username, String password) {
var user = new User();
user.forename = 'Alice';
user.surname = 'password';
user.isLogin=true;
return user;
}
}
User doLogon(AuthService authSvc, String username, String password) {
User user = authSvc.auth(username, password);
print("User is authenticated:${user.isLogin}");
return user;
}
main() {
AuthService authService = new MockAuthService();
var user = doLogon(authService, 'Alice', 'password');
print(user.forename);
print(user.surname);
authService = new YourAuthService();
user = doLogon(authService, 'Alice', 'password');
print(user.forename);
print(user.surname);
}
运行效果
User is authenticated:false
testForename
testSurname
User is authenticated:true
Alice
password
Dart 抽象类
从上面的demo中我们可以发现,AuthService其实并没有实际的代码,因此我们可以通过abstract class 来进行定义。
具体代码如下:
class User {//类名称
String _forename; //私有属性
String get forename => _forename; // 公开getter方法,可以访问私有属性
set forename(value) => _forename = value; // 公开setter方法
String surname; //公有属性
String getFullName() //返回forename和surname 字符串的公有函数
{
return "$forename $surname"; //Dart字符串格式化方式
}
bool isLogin;//是否登录 true or false
}
abstract class AuthService {
User auth(String username, String password) ;
}
class MockAuthService implements AuthService {
User auth(String username, String password) {
var user = new User();
user.forename = 'testForename';
user.surname = 'testSurname';
user.isLogin=false;
return user;
}
}
class YourAuthService implements AuthService {
User auth(String username, String password) {
var user = new User();
user.forename = 'Alice';
user.surname = 'password';
user.isLogin=true;
return user;
}
}
User doLogon(AuthService authSvc, String username, String password) {
User user = authSvc.auth(username, password);
print("User is authenticated:${user.isLogin}");
return user;
}
main() {
AuthService authService = new MockAuthService();
var user = doLogon(authService, 'Alice', 'password');
print(user.forename);
print(user.surname);
authService = new YourAuthService();
user = doLogon(authService, 'Alice', 'password');
print(user.forename);
print(user.surname);
}
abstract 关键词告知Dart这个类方法没有被实现。具体抽象类的使用思路大家可以参考任何一本设计模式的书籍。