Flutter (九)变量、数据类型、方法定义、类定义、多继承、抽象类

鉴于很多朋友私信让分享一些dart基础知识,今天就给大家分享一些dart基本操作!!!

  • 变量:一旦附上值,他的数据类型就定了 不能在赋其他类型值
1.
var username = 'Flutter';//username 就定了是字符串类型
username = 123;//此时再赋整型就行报错
2.
Object和dynamic 都是大的类型
  dynamic a = 'goood job'; //dynamic是可以推断出值是什么类型
  Object  b = 'goodd job';
  print(a.length);
  print(b.length);//b 是不具备length方法
  • 常量:设置一次值之后就不能在变了
1.
final psw1 = 'Flutter';
2.
const psw2 = 'Flutter';
  • 数据类型
int psw3 = 110;
double psw4 = 11.1;
//字符串转int
int psw5= int.parse('119');
double psw6 = double.parse('111.11');
//int转字符串
String psw7 = psw3.toString();
//四舍五入并且保留两位小数
String psw8 = 123.2262.toStringAsFixed(2);
print(psw8);//值是123.23

//bool类型
bool results = 123 > 110;
print(results);//打印结果:true
bool results = 1 == '1';
print(results);//打印结果:false

//List 是数组类型
List list = [1,3,5,7,9];//创建数组方式1
List newList = new List();//创建数组方式2
newList.add(2);//add 一个值进去
newList.addAll([4,6,8,10]);//add  一个数组进去
print(newList);//打印结果:2 4 6 8 10
print(newList.length);//打印结果:5
print(newList.first);//打印第一个值        打印结果:2
print(newList.last);//打印最后一个值     打印结果:10
print(newList[2]);//打印下标为2 的值    打印结果:6

//Map类型  对象类型
Map obj = {'x':1,'y':2,'z':3};//创建方式 1
Map newObj = new Map();//创建方式 2
newObj['x'] = 1;
newObj['y'] = 2;
print(newObj);//打印结果:{x: 1, y: 2}
print(obj.containsKey('x'));//判断是否包含x的key    打印结果:true
print(obj.containsKey('a'));//                     打印结果:false
obj.remove('y');//删除Map中对应的值                       
print(obj);//                                      打印结果:{x: 1, z: 3}

  • 定义方法
//无参  有返回值
//返回参数是字符串类型  方法名是getUserName
String getUserName(){
  return 'hello world';
}
String userName = getUserName();//调用

//有参  有返回值
//返回参数是字符串类型   方法名getPersionInfo  接收的参数是userId
String getPersionInfo(int userId){
  Map userInfon = {
    '111':'zhangsan',
    '222':'lisi',
  };
  return userInfon[userId.toString()];
}
String userId = getPersionInfo(111);//调用
print(userId);//打印结果:zhangsan

//可选参数
//1.可选参数 [ ]  中括号代表可选参数   不加中括号的话就是必传的参数
int addAge(int age1,[int age2]) {
  return age1+(age2 != null ? age2 : 0);
}
int age = addAge(1,2);//调用
print(age);//打印结果:3
//2.可以给参数赋上默认值  赋上默认值要给参数加上大括号
int addAge2([int age1,int age2 = 0]){
  return age1+age2;
}
int age2 = addAge2(1,2);//调用
print(age2);//打印结果:3

//匿名函数  for循环遍历数组
var list = ['abc','cde','afg'];
list.forEach((str){
  print(str);
});
打印结果:abc  cde  afg
  • 类的使用
//1.只是创建了一个类里面有2个属性
class Person {
  int age;
  String name;
}
p.age = 23;
print(p.age);

//2.具有实例化的方式创建一个类
class Person2 {
  //1.可以给这个类定义一些属性
  int age;
  String name;
  //构造函数 就是一个同名的方法
  Person2(int age,String name){
    this.age = age;
    this.name = name;
  }
  //2.可以给这个类定义一些方法
  void sayHello(){
    print('My name is:'+this.name);
  }
}
var p2 = new Person2(23,'zhansgan');//实例化的方式创建
print(p2.name);//打印结果:zhansgan
p2.sayHello();  //打印结果:My name is:zhansgan(调用了Person2里面的sayHello方法)
  • 类的继承
//1.创建了Worker类  继承 Person2
class Worker extends Person2 {//继承用  extends
  int salary;//比父类多了一个属性salary
  Worker(int age, String name,int salary) : super(age, name){//新添了一个属性salary
    this.salary = salary;
  }
  @override  //告诉编译器 我重写了父类的同名方法
  void sayHello(){
    super.sayHello();//先调用了父类的sayHello
    print('My salary is:'+this.salary.toString());
  }
}
//外界使用
var w = new Worker(20, 'lisi', 1000);
w.sayHello();//打印结果是 先打印父类的sayHello方法   再打印Worker的sayHello方法
  • dart 里面只能单继承 不能继承多个父类 如果有需要继承多个父类的需求需要用混合的方式实现
    比如看下面例子:
//1.定义了一个Eat类
class Eat {
  void eat(){
    print('吃饭');
  }
  void sayHello() {
    print('say hello in Eat');
  }
}
//2.定义了一个Sleep类
class Sleep {
  void sleep(){
    print('睡觉');
  }
  void sayHello() {
    print('say hello in Sleep');
  }
}
//3.定义了一个Person类混合了Eat和Sleep类
class Person with Eat,Sleep {//多继承  把Eat 和 Sleep 都混合到Person 里面去   这时Person3就具备了eat和sleep的方法
  //1.可以给这个类定义一些属性
  int age;
  String name;
  //构造函数
  Person3(int age,String name){
    this.age = age;
    this.name = name;
  }
  //2.可以给这个类定义一些方法
  void sayHello(){
    print('My name is:'+this.name);
  }
}
var p = new Person(18, 'wangwu');
p.eat();//这时p 具备了Eat类的方法
p.sleep();//这时p 具备了Sleep类的方法
p.sayHello();//p 还具备了我自己的方法  //注意 如果混合的类里面有和自身类同名的方法的时候优先使用自身类的方法、其次是用混合最后一个类的方法
  • 抽象类:就是我有一个想法 但是我不知道怎么实现。所以我就先把我的想法说出来。
    抽象类不能实例化 所以用抽象类就是为了定义一个规则 让别人遵守这个规则
//定义一个抽象类
abstract class Animal {
  //这是一个方法的实现
//  void have_a_baby(){
//    print(have_a_baby);
//  }
  //抽象方法  只有方法的定义
  void have_a_baby();
}
//这时再创建一个类继承Animal抽象类
class Person extends Animal {
  //1.可以给这个类定义一些属性
  int age;
  String name;
  //构造函数
  Person3(int age,String name){
    this.age = age;
    this.name = name;
  }
  //2.可以给这个类定义一些方法
  void sayHello(){
    print('My name is:'+this.name);
  }
  //3.实现have_a_baby  这时Person继承了Animal类。但是Animal类里面的方法没有实现,就会报错,此时需要子类实现这个方法
  @override
  void have_a_baby() {
    // TODO: implement have_a_baby
    print('have_a_baby');
  }
}

QQ:522608370

点个赞呗😊!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 3,146评论 2 9
  • 一. Dart入口方法 每一个flutter项目的lib目录里面都有一个main.dart。这个文件就是flutt...
    骑马纵天下阅读 2,648评论 0 1
  • 也许并无出路 谁都不去在意 那谁还有心思 无知才是真真切切的 沉默并不是真心的 没有力气去对抗 放任自己 是讨好了...
    骆训文_a928阅读 174评论 0 1
  • 七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...
    屉屉阅读 228评论 0 0
  • 五一,雨,观花,习字,唯爱纳兰,山一程,水一程,风一更,雪一更。
    党向阳阅读 258评论 5 4

友情链接更多精彩内容