一、概述
Dart是面向对象语言,以对象为核心,而对象的核心就是类,类作为数据封装的载体,并且dart为class提供了内置支持。
二、类的声明
class class_name {
<fields>
<constructors>
<getters/setters>
<functions>
}
类成员可包括以下内容
-
<fields>
字段 - 字段是类中声明的任何变量或常量。字段表示与对象有关的数据。 -
<constructors>
构造函数 -
<getters/setters>
get和set方法 -
<functions>
函数
三、类的实例化
类的实例化,也就所说的创建对象。语法如下:
SplayTreeMap map = new SplayTreeMap(); //new 可以省略
实例化完成后,就可以通过map引用进行相关操作了。比如使用map中的实例和函数:
map.length;
map.lastKey();
四、构造函数
请查看 构造函数
五、函数
请查看 函数
六、Geter和Seter
Getter和Setter函数,dart语言中,都会为每个属性匹配setter,getter函数,但是final修饰的属性只有getter函数。
class Circle{
static final double PI = 3.14;
double radius; //半径
Circle(this.radius);
double get area => PI * radius * radius;
get _girth => 2 * PI * radius;
set setRadius(radi) => radius = radi;
void main() {
Circle circle = Circle(0.5);
circle.setRadius = 1;
}
}
七、作用域
dart中只有两种作用域,即公有和私有。正常情况下就是公有,如果想弄成私有,在变量或函数名前加个下划线即可。如下:
class Father {
int bloodGroup; //公有变量
int _character; //私有变量
int getBloodGroup() { //公有函数
return bloodGroup;
}
int _getCharacter() { //私有函数
return _character;
}
}
八、继承
面向对象语言基本都会支持继承概念,被继承的类我们通常称为父类或超类,继承的类称为子类,继承父类的成员函数称为重写。继承使用的关键字为extends,子类可以继承父类中除构造函数和静态成员以外的所有成员。Dart不支持多重继承。
语法:
class child_class_name extends parent_class_name
示例:
class Father {
int bloodGroup;
int getBloodGroup() {
return bloodGroup;
}
}
import 'package:flutter_demo/clazz/Father.dart';
class Son extends Father{
@override
int getBloodGroup() { //方法重写
// TODO: implement getBloodGroup
return super.getBloodGroup();
}
}
九、抽象类
抽象类不能实例化,它主要是用来定义标准的,可以使用extends关键字来继承抽象类,也可以使用implements关键字当做接口来实现。
1、抽象类通过abstract 关键字来定义
2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
3、如果子类继承抽象类必须得实现里面的抽象方法
4、如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
5、抽象类不能被实例化,只有继承它的子类可以被实例化
十、this
this是指类的当前实例(当一个类被实例化后,this可以拿到这个对象的所有内容)。一般在构造器内给参数赋值用的比较多。
十一、static
static主要用于对类内的成员进行定义,有static修饰就表示该成员为静态成员,可以直接用类名调用。
十二、super
super关键字是用来指当前类的直接父类,表示父类的对象。
十三、可调用类
/**
* 如果一个类中只有一个call方法,那么这个类就叫做可调用类
* 直接对象名(参数1,参数2)调用即可
*/
class CallClass {
call(String s, int i) => print('xxxx');
}
void main() {
var v = CallClass();
v('xxx',1);
}