您现在的位置是:首页 > 综合文章 > FlutterFlutter

Dart面向对象

譬如朝露2019-11-16Flutter220人已围观

简介dart中的类与对象1.使用关键字class声明一个类2.使用new 创建一个对象,new可以被省略3.所有对象都继承与Object类dart对象中属性默认生成g...

dart中的类与对象

1.使用关键字class声明一个类

2.使用new 创建一个对象,new可以被省略

3.所有对象都继承与Object类


dart对象中属性默认生成getter和setter方法

使用final声明的属性只有getter方法

void main() {
  var person = Person();
  person.name = '张三';
  person.age = 20;
  print(person.name);
  print(person.work());
}

class Person {
  String name;
  int age;
  //final声明的属性是不可以被实例修改的
  final String address = '北京市';
  String work() {
    return 'name is $name;age is $age,address is $address';
  }
}

类中如果使用final声明属性,实例只能访问,不能被修改

类及成员可见性

1.Dart中的可见性以library(库)为单位

2.默认情况下每个dart文件就是一个库

3.使用_表示库的私有性,只在当前dart文件中才能方法,属性和方法私有性都是使用_来表示的

4.使用import导入库

计算属性


void main() {
  var rect = Rect();
  rect.width = 20;
  rect.height = 30;
  print(rect.area);
}

class Rect {
  num width, height;
  num get area {
    return width * height;
  }
}

类中的area就相当于计算属性,计算属性的格式 get 属性名{}访问,实例.属性名称


set设置属性的值

void main() {
  var rect = Rect();
  rect.area = 20;
  rect.height = 30;
  print(rect.area);
}

class Rect {
  num width, height;
  num get area {
    return width * height;
  }

  set area(value) {
    width = value;
  }
}

之前都是使用class定义一个类,下面使用构造方法实现一个类,如果没有存在自定义的构造方法,则默认生成一个构造方法,如果有构造方法,那么默认的就会失效

class Person {
  String name;
  int age;
  final String sex;
  //final声明的属性是不可以被实例修改的
  final String address = '北京市';
  String work() {
    return 'name is $name;age is $age,address is $address';
  }

  Person(this.name, this.age, this.sex) {
   
  }
}
 Person(this.name, this.age, this.sex) {
    print(name);
  }
  等于下面的写法
  Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

如果使用了final声明的属性,那么使用this.xx=xx不能赋值,只有第一种构造方法才能赋值

import 'person.dart';

void main() {
  var person = Person('张三', 18, 'man');
  print(person.work());
}

常量构造方法

常量构造方法,属性只能在初始化的时候赋值一次,所有的属性需要使用final声明

class Person {
  final String name;
  final int age;
  final String sex;
  
  final String address = '北京市';
  String work() {
    return 'name is $name;age is $age,address is $address';
  }

  const Person(this.name, this.age, this.sex);
}
void main() {
  const person = const Person('张三', 18, 'man');
  print(person.work());
}

常量构造方法与普通构造方法的区别,常量的构造方法在实例化后不能修改属性的值,

级联操作

级联操作用2个点(..)表示,可对同一对象执行一系列操作。类似于JavaScript的Promise的then处理。

void main() {
  var person = new Person();
  person
    ..name = "perter"
    ..age = 20
    ..work();
}

class Person {
  String name;
  int age;
  void work() {
    print('name  is  $name,age is $age');
  }
}

以上代码表示Person有两个成员一个name和age,可以使用..直接对成员进行赋值,等同于下面这段代码

void main() {
  var person = new Person();
  person.name = 'perter';
  person.age = 20;
  person.work();
}

class Person {
  String name;
  int age;
  void work() {
    print('name  is  $name,age is $age');
  }
}


譬如朝露
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《譬如朝露》。
  • 本文网址:http://www.pangbo51.com/flutter/327.html
  • 上篇文章:dart中的function
  • 下篇文章:Dart面向对象(二)
  • Dart

站长特荐

关闭
QQ 微信 支付宝扫一扫打赏