Dart語言基礎(chǔ)學(xué)習(xí)之Class 類

Class

類是面向?qū)ο蟮幕A(chǔ),讓我從了解類開始深入Dart語言的世界。本文將從下面幾個(gè)方面介紹:

  • 類的定義
  • 抽象類(接口)

Dart語言的定義

Dart是一種單繼承,基于類,面向?qū)ο蟮恼Z言。它在類和接口機(jī)制方面與Java和C#有許多相似之處。下面是個(gè)類的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 運(yùn)行效果

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)建對(duì)象
  user.forename = "Alice";//給對(duì)象forname屬性賦值
  user.surname = "Smith";// 給對(duì)象surname屬性賦值
  String fullName= user.getFullName();//調(diào)用對(duì)象方法
  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);
  
}

運(yùn)行效果

User is authenticated:false
testForename
testSurname
User is authenticated:true
Alice
password

Dart 抽象類

從上面的demo中我們可以發(fā)現(xiàn),AuthService其實(shí)并沒有實(shí)際的代碼,因此我們可以通過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這個(gè)類方法沒有被實(shí)現(xiàn)。具體抽象類的使用思路大家可以參考任何一本設(shè)計(jì)模式的書籍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容