flutter & Dart知识点

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这个类方法没有被实现。具体抽象类的使用思路大家可以参考任何一本设计模式的书籍。

上一篇下一篇

猜你喜欢

热点阅读