Dart系列(十)静态属性,类的继承、和..级联操作等


发文时间:2021年03月06日 01:21:29     编辑:Aaron      标签:记录Dart语言的学习历程 522


Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。

1、static静态属性 调用案例

//定义一个类
class Cdata{
  /*
   dart中的静态成员
   1、使用static 关键词来实现类级别的变量和函数
   2、静态方法不能访问非静态成员,非静态方法可以访问静态方法和公有方法(简而言之 公共方法可
  以访问全部方法)
   */ 
 
  //定义一个静态的属性
  static String  name='张三';
  
  //定义一个静态的方法
  static void show(){
    print("${name} -- 方法");
  }
  
  
  //定义一个非静态的属性和方法  (静态方法只可以操作静态的)
  int age=20;
  void cinfo(){ //非静态方法 可以调用全部
    
    print(name);//访问静态属性的写法 ,不用this 因为可以直接调用
    
    print(this.age);//访问非静态属性 可带this 可不带this
    
    show();//访问静态属性的方法
  }
  
  
}

main(){
  //main方法处调用静态属性或静态方法
//   print(Cdata.name);
//   Cdata.show(); //调用成功 不用new
  
  Cdata c=new Cdata();
  c.cinfo();//非静态的调用 静态方法
  
  //总结就是 静态的方法 可以直接调用 类名.方法或属性 然后静态的不可以调用非静态的
  
}


2、对象的操作符

class Pdata{
  /*
 dart中的对象操作符
    ?  条件运算符 判断当前值是否存在(或是否为对象)
    is 类型判断 if(变量 is int) 返回bool
    as 类型转换
    .. 级联操作 (连缀-连写)
 */ 
  String name;
  int age;
  
  Pdata(this.name,this.age);
  
  void getInfo(){
    print("name = ${this.name} -- age= ${this.age}");
  }
}



// .. 级联操作 案例
main(){
  
  //假设需要更改Pdata中的name age 和调用getinfo方法  以往的写法是
  Pdata a=new Pdata('张三',1);
  a.name='卡卡';
  a.age=10;
  a.getInfo(); //成功调用 name = 卡卡 -- age= 10
  
 print('-------------分隔线----------------');
  
  //这样写太繁琐了 可以用级联来写 简化代码
  a..name='卡卡1'
    ..age=20
    ..getInfo();//成功简化调用 name = 卡卡1 -- age= 20
  
  
}



//as 类型转换案例
// main(){
  
//   //假设一个变量一开始是一个string 类型的
//   var q;
//   q='';
  
//   //然后又让这个变量去实例化类
//   q=new Pdata('张三',20);
// //   q.getInfo();//然后调用类中的一个方法  这样可能会报错(版本不一致 可能会报错) 
//这样要调用的话 那就把这个变量强制转为对象类型
  
//   //强制转化为对象类
//   (q as Pdata).getInfo(); //成功调用 
// }



  //? 条件运算符案例
// main(){
//   Pdata p; //如果只是类赋值了变量 但是变量没有实例化类 
  //   p.getInfo();//调用 p中的getInfo 那会报错 
  //预防这种错误就可以用 ?
//   p?.getInfo();//虽然没有返回值,因为本身就没有这个方法的 能杜绝不报错
  
// }

3、类的继承 extends等

class Pdata{
  /*
 dart中的类的继承 封装 继承 多态
  1、子类可以使用extends 关键词 继承父类
  2、子类会继承父类里可见的方法和属性等 但是不会继承构造函数
  3、子类可以覆写父类里的方法  getter 和setter
 */

  String name;
  int age;

  Pdata(this.name,this.age);

  void getInfo(){
    print("父类name = ${this.name} -- age= ${this.age}");
  }

  void newData() {}

  fuData(){
    print('我是一个父类的方法a');
  }

  void ziData() {}
}

//新建一个类 并且继承 Pdata类 假设新的一个类 继承带有构造函数的类 那么就需要加入 super
class Web extends Pdata{

  String sex;
  //初始化列表 给父类传参  也可以定义自己的属性sex
  Web(String name, int age,String sex) : super(name, age){  
    //可以点击报错 编译器 自动会生成
    this.sex=sex;
  }

  //覆写父类的方法  覆写的时候 方法前面加个@override 为了规范和不会报错
// 也表示这个方法是覆写的 (可以写 可以不写)
  @override
  getInfo(){
    print("子类的方法 ${this.sex}");
  }

  newData(){
    print('我是子类的1111一个方法,我是独一份的');
  }


  //子类调用父类的方法
  ziData(){
    super.fuData();
    // this.fuData();//都可以调用父类的工作

  }

}

//操作继承的东西
main(){

  //假设需要更改Pdata中的name age 和调用getinfo方法  操作父类的方法
  Pdata w=new Web('张三',1,'男生');
  // w.getInfo(); //成功调用 name = 张三 -- age= 1

  //调用子类的方法  todo 这里有点小问题 无法调用子类中的方法
  // w.newData();

  //覆写 父类的方法  (父类和子类都有getInfo这个方法)
  w.getInfo();//输出 子类的方法


  w.ziData();


}


 

若无特殊说明,此文章为博主原创。
写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/41.html




SITE MAP

  FOLLOW US