Class
類是面向?qū)ο蟮幕A(chǔ)飞涂,讓我從了解類開始深入Dart語言的世界授舟。本文將從下面幾個方面介紹:
- 類的定義
- 抽象類(接口)
Dart語言的定義
Dart是一種單繼承澜驮,基于類菠发,面向?qū)ο蟮恼Z言蔫缸。它在類和接口機制方面與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 字符串的公有函數(shù)
{
return "$forename $surname"; //Dart字符串格式化方式
}
}
main(){
User user = new User();//創(chuàng)建對象
user.forename = "Alice";//給對象forname屬性賦值
user.surname = "Smith";// 給對象surname屬性賦值
String fullName= user.getFullName();//調(diào)用對象方法
print(fullName); // 輸出
}
Dart 類的繼承
Dart是一種單繼承的面向?qū)ο笳Z言拾碌,下面是繼承的demo
class User {//類名稱
String _forename; //私有屬性
String get forename => _forename; // 公開getter方法吐葱,可以訪問私有屬性
set forename(value) => _forename = value; // 公開setter方法
String surname; //公有屬性
String getFullName() //返回forename和surname 字符串的公有函數(shù)
{
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中我們可以發(fā)現(xiàn),AuthService其實并沒有實際的代碼校翔,因此我們可以通過abstract class 來進(jìn)行定義弟跑。
具體代碼如下:
class User {//類名稱
String _forename; //私有屬性
String get forename => _forename; // 公開getter方法,可以訪問私有屬性
set forename(value) => _forename = value; // 公開setter方法
String surname; //公有屬性
String getFullName() //返回forename和surname 字符串的公有函數(shù)
{
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 關(guān)鍵詞告知Dart這個類方法沒有被實現(xiàn)防症。具體抽象類的使用思路大家可以參考任何一本設(shè)計模式的書籍孟辑。