Dart 语言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoleizhanghahaha/article/details/89790344

---故事四

//类与对象,声明,创建及基本特征
//使用关键字class 声明一个对象
//使用关键字new 创建一个对象,new 可省略
//所有对象都继承于 Object类
//import 'person.dart';
//void main(){
//  var person= new Person();
//  person.name="zhangsan";
//  person.age=20;
//  print(person.name);
//  person.address;
//  person.work();
//}
//----------------------------------
//类及成员可见性
// dart 中的可见性以 library(库) 为单位
//默认情况下,每一个 dart 文件就是一个库
//使用 _ 表示库的私有属性
//使用 import 导入库
//----------------------------------
//计算属性
//计算属性值是通过计算而来,本身不存储值
//计算属性赋值,其实是通过计算转换到其它实例变量
//void main(){
//  var rect= new Rectangle();
//  rect.height=20;
//  rect.width=10;
//  print(rect.area);
//}
//class Rectangle{
//  num width, height;
////  num get area{
////    return width * height;
////  }
//  num get area =>width * height;
////  num area(){
////    return width * height;
////  }
//}
//----------------------------------
// 构造方法
//如果没有自定义构造方法,则会有个默认构造方法
//如果存在自定义构造方法,则默认构造方法无效
//构造方法不能重载
// 命名构造方法
//使用命名构造方法,可以实现多个构造方法
// 使用  类名.方法 的形式实现
//----------------------------------
//常量构造方法:对象声明成一个常量,构造方法也是一个常量const
//如果类是不可变状态,可以把对象定义为编译时常量
//使用const声明构造方法,并且所有变量都为final
//使用const 声明对象,可以省略
//void main(){
//  const person= Person("张三",20,"mel");
//}
//class Person{
//  final String name;
//  final int age;
//  final String gender;
//  const Person(this.name,this.age,this.gender);
//  void work(){
//    print('work .....');
//  }
//}
//----------------------------------
//工厂构造方法
//工厂构造方法类似于设计模式中的工厂模式
//在构造方法前添加关键字 factory 实现一个工厂构造方法
//在工厂构造方法中可以返回对象
//class Logger{
//  final String name;
//  static final Map<String,Logger> _cache= <String,Logger>{};
//  factory Logger(String name){
//    //工厂构造方法  是一个构建工厂
//    if(_cache.containsKey(name)){
//      return _cache[name];
//    }else{
//      final logger=Logger._internal(name);
//      _cache[name]=logger;
//      return logger;
//    }
////    return Logger._internal("dart");
//  }
//  Logger._internal(this.name);
//  void log(String msg){
//    print(msg);
//  }
//}
//----------------------------------
//初始化列表 在构造方法前执行
//初始化列表会在构造方法体执行之前执行
//使用逗号分隔初始化表达式
//初始化列表常用于设置final变量的值
//void main(){
//  var person= Person("张三",20,"mel");
//}
//class Person{
//   String name;
//   int age;
//   final String gender;
//   Person(this.name,this.age,this.gender);
//   Person.withMap(Map map): gender=map['gender']{
//     //gender=map['gender'] 的执行在构造方法初始化前面 给final方法赋值
//     this.name = map['name'];
//     this.age = map['age'];
//   }
//  void work(){
//    print('work .....');
//  }
//}
//----------------------------------
//静态成员
//使用 static 关键字来实现  属于类级别的变量和函数, 不属于对象级别
// 静态成员不能访问非静态成员,非静态成员可以访问 静态成员。
//类中的常量需要使用 static const 声明
//void main(){
//var page= new Page();
//Page.scrollDown(); //类名.方法名
//}
//class Page{
//  static const int maxPage=10; //声明静态常量
//  static int currentPage=1;
//  //下滑
//static void scrollDown(){
//  currentPage=1; // 只能访问静态
//  print("ScrollDown...");
//}
////上滑
//void scrollUp(){
//  currentPage++;//可以访问静态非静态的
//  print("scrollUp...");
//}
//}
//----------------------------------
//对象操作符号
// 条件成员访问: ?.
// 类型转换: as
// 是否指定类型: is, is!
// 级联操作: ...
//void main(){
////  Person person;
////  person?.name;//如果前面为空,不在执行  防止空指针
////  person?.work();//如果前面为空,不在执行
////var person;
////person="";
//////person= new Person();  //动态类型
//////(person as Person).work();//转换之后调用
////if (person is Person){
////  person.work();
////}
////var person= new Person();
////person..name="tome"
////  ..age=20..work();// 级联操作
//  new Person()..name="tome"..age=20 // 级联操作
//      ..work();
//}
//class Person{
//  String name;
//  int age;
//  void work(){
//    print("work ....");
//  }
//}
//----------------------------------
//对象call 方法
// 如果类实现了 call() 方法的,测该类的对象可以作为方法使用
void main(){
var person= new Person();
person.name='zhangsan';
person.age=20;
print(person("test",30));//对象作为一个方法调用
}
class Person{
  String name;
  int age;
  void work(){
    print("name is $name,Age is $age");
  }
//  void call(String name,int age){
//    print("name is $name,Age is $age");
//  }
  String call(String name,int age){//call 方法
    return "name is $name,Age is $age";
  }
}
class Person{
  String name;
  int age;
  String _birthday;
  bool get isAdult => age>18;
  void run(){
    print("Person run ...");
  }
  @override
  String toString() {
    return "Name is $name,Age is $age";
  }
}

猜你喜欢

转载自blog.csdn.net/xiaoleizhanghahaha/article/details/89790344