Dart 类
类
类属性
基于Dart的所有变量均是对象的原则,建议所有的变量初始化或加上空安全;
Dart对象的属性如果没有限制空安全,则必须在初始化时赋值。
class Car {
String? name;//空安全
Double price = 0.0;//初始化
}
方法
Dart支持胖箭头函数:=>,但是仅限表达式(即一句程序解决问题)👇
sum(a,b)=> a+b;//表达式
bigger(a,b) => a>b?a:b;//表达式
同一域内,不允许存在同名方法
构造器
与Java不同,Dart的构造器不允许重载!只能用命名构造函数,比如.Init,.create等(命名不固定,全凭自己定义)
class User{
String? name;
User(){}
User.Init(String name){
this.name = name;
}
}
//调用
var jack = User();
var bob = User.Init('bob');
Dart为类的构造器提供了一个语法糖——构造器后用:
提前执行一些处理工作,但是运用这种语法糖有个前提——处理必须处理所有的非空类属性,比如:
class User{
String name;// 非空的类属性
User.Init(String name):this.name = name.trim(){}
}
普通类方法
与Java不同,Dart方法不支持重载!比如下面写法就是错误的!
class Calculate{
add(int val_1, int val_2) => val_1 + val_2;
add(int val_1, int val_2,int val_3) => val1 + val2 + val_3;
}
同一类中必须唯一命名Dart的方法
get / set 方法
针对属性的get/set,Dart提供了一套语法模板👇
class Space {
String _name = '';
// 一定要写返回类型!返回类型可以不是原类型
String get name {
return _name;
}
set name(String name) {
this._name = name;
}
}
如果get方法里对于数据没有特殊校验,可以直接写为箭头函数
class Space { String _name = ''; String get name => _name; }
抽象类
用abstract
修饰的类;只有抽象类中才可定义抽象方法。
abstract class Animal {
String name;//抽象类属性
Animal({required this.name});//构造方法(后面讲)
void eat();//抽象方法
}
继承
和Java一样,Dart只允许继承一个父类!
/// 父类
abstract class Animal {
String name;
Animal({this.name});
void eat();
}
/// 子类
import 'Animal.dart';
/// 继承Animal父类
class Cat extends Animal {
Cat({required super.name});// 构造方法
@override
void eat() {
print('$name 吃鱼');
}
}
接口
Dart中没有interface
关键字,接口使用class
定义,实现接口使用implements
关键字;建议接口使用抽象类
/// 接口类
abstract class Actions {
void run();
}
/// Cat实现Actions接口
import 'Animal.dart';
import 'Actions.dart';
class Cat extends Animal implements Actions {
Cat({required super.name});// 构造方法
@override
void eat() {
print('$name 吃鱼');
}
/// 实现接口方法
@override
void run() {
print('$name 悄悄跑');
}
}
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/p/17215267.html