5、dart 语言学习 类

90 阅读2分钟

概念

Dart 是支持基于 mixin 继承机制的面向对象语言,所有对象都是一个类的实例,而除了 Null 以外的所有的类都继承自 Object 类。 基于 mixin 的继承 意味着尽管每个类(top class Object? 除外)都只有一个超类,一个类的代码可以在其它多个类继承中重复使用。 扩展方法 是一种在不更改类或创建子类的情况下向类添加功能的方式。

类运算符

OperatorMeaning
as类型转换(也用作指定 类前缀))
is如果对象是指定类型则返回 true
is!如果对象是指定类型则返回 false
...级联操作

定义类

/// 定义一个person的类
class Person {}
/// 实例化类
var p= new Person();

类初始化默认值

/// 定义一个person的类
class Person {
  String? name;
  int? age;
  Person():name="zhangsan",age=20{}
}
/// 实例化类
var p= new Person();

构造函数

默认构造函数

/// 定义一个person的类
class Person {
	String? name;
  int? age;
	Person(String name,int age){
    this.name=name;
    this.age=age;
  }

  ///简化构造
  Person(this.name,this.age)
}
/// 实例化类
var p= new Person("张三",18);

匿名构造函数

/// 定义一个person的类
class Person {
	String? name;
  int? age;
  //匿名构造函数
	Person.setName(String name){
    this.name=name;
  }
  
  //简写
	Person.setName(this.name)

	printName(){
    print(this.name)
  }
}

注意:匿名构造函数可以有多个,但是默认构造函数只能一个

属性

私有属性

使用下划线定义私有属性,需要定义到单独的文件才生效

String _name="zhangsan";

方法

私有方法

使用下划线定义私有方法 ,需要定义到单独的文件才生效

get/set

get/set 在vue 中其实就是computed 计算属性

class Rect {
  int width = 0;
  int height = 0;

  Rect(this.width, this.height);

  int area() {
    return width * height;
  }

  ///get 
  int get area1 {
    return width * height;
  }
  //set 
  set area2(int height) => this.height = height;

  // set area2(int height){
  //    this.height = height;
  //  }
  ///这种是不行的,必须要有一个返回值
  // set area2(this.height)

}

main() {
  Rect p = Rect(10, 10);
  var area = p.area();
  print(area);

  ///调用和方法不一样,不需要括号
  p.area2 = 30;
  print(p.area1);
}

静态成员/方法

1、使用static 关键字来定义静态成员/方法

2、静态成员不能访问非静态成员,非静态成员可以访问静态成员

3、静态成员不需要实例化类,直接通过 类.静态成员 访问

/// 定义一个person的类
class Person {
  String? name;
  int? age;
  static String nickName="lisi";
	static void showName(){
    print(nickName)
  }
  void showName1(){
	 //print(nickName)//error 
   // showName();//error
  }
  
}
/// 实例化类
var p= new Person();

main(){
	///直接调用静态类
  print(Person.nickName) // lisi
  ///静态方法可以访问静态属性
	Person.showName();//lisi
  
}

继承

关键字 extends