Flutter——Dart面向对象

本文深入探讨Dart中的面向对象特性,包括类与对象、构造函数、工厂构造与单例对象、类方法、继承、抽象类、混入Mixins以及操作符重载。详细讲解了Dart如何声明类、构造对象,以及如何实现单例模式、类方法和对象操作。此外,还介绍了Dart的继承机制、抽象类和接口的使用,以及如何通过混入实现多继承的效果。最后,文章讨论了操作符重载的应用,帮助开发者更好地理解和运用Dart的面向对象编程。
摘要由CSDN通过智能技术生成

1. 类与对象

在Flutter中,使用class 关键字声明一个,使用new加上构造函数生成一个对象,所有的对象都默认继承Object类。Dart中会默认生成getter 和 setter方法,属性和方法都通过点语法进行访问,Dart方法不支持重载。final修饰的属性必须定义初始值。

声明一个类:

class LGPerson {
  String? name;
  int? age;
  final String hobby = 'coding';
  void run() {
    print("name:$name age:$age");
 }
}

声明一个对象和方法调用:

  LGPerson p = LGPerson();
  p.name = 'LS';
  p.age = 18;
  p.run();

在Dart中,同文件是不存在私有化的,只有在不同文件中,才能有私有属性。
新建一个文件,并添加一个新的LGTeacher类,只对外暴露height属性和printTeacher方法。

class LGTeacher {
  String? _name;
  int? _age;
  int? height;

  void _run() {
    print("name:$_name age:$_age");
  }
  void printTeacher() {
   _run();
  }
}

这里可以看到,外部就无法访问私有属性和方法了,而如果是同一个文件里面的class,则依然可以访问。

在这里插入图片描述

2. 构造函数

定义完一个类之后,这个类默认就有构造函数。相当于:

LGperson(){}

这里可以自定义构造函数,如果自定义了构造函数,那么默认的构造函数就无效了。

 LGPerson(int age,String name){
    _name = name;
    _age = age;
  }
  
  LGPerson p = LGPerson(18,"test");

如果这里不是私有属性的话, 就会出现属性和参数名字一样的情况:

    name = name;
    age = age;

这里可以将参数改名字或者在属性前面加this.,但是推荐使用Dart语法糖来自动赋值。

  LGPerson(this.age,this.name);

用了这个语法糖之后,属性也可以不需要变成Nullability的。

class LGPerson {
  String name;
  int age;

  LGPerson(this.age,this.name);
  void run() {
    print("name:$name age:$age");
 }
}

如果属性使用final修饰的,那么这个属性之后就不能改变了。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值