7.面向对象

dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,所有的类都是Object的子类,换句话说就是万物皆对象

7.1.类与对象

void main() {
// 注意:new关键字可以省略
var p = new Person();
p.name = "xiaoqiang";
p.showName();
p.showAge();
} class Person {
String name;
int age;
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
}

注意1:可以使用final来创建一个只读的属性

void main() {
// 注意:new关键字可以省略
var p = new Person();
p.name = "xiaoqiang";
p.showName();
p.showAge();
p.gender = "女"; // 报错, gender定义的时候是不能修改的
} class Person {
String name;
int age;
final String gender="男";
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
}

注意2: 方法不能被重载

class Person {
String name;
int age;
final String gender="男";
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
void showName () { // 报错
print("名字是:${name}");
}
}

7.2.计算属性

计算属性从字面上可以理解为值是通过计算得来的

import 'dart:math';

void main() {
// 注意:new关键字可以省略
var p = new RrightTriangle();
// p.a = 3;
// p.b = 4;
// print(p.c);
p.c = 5;
print(p.a); } class RrightTriangle {
num a, b;
num get c {
return sqrt(a*a + b*b);
}
set c(value) {
a = sqrt(pow(value, 2) - 16);
}
}

7.3.构造方法

构造方法就是我们创建对象时调用的方法,如果没有自定义构造方法,则会调用默认的构造方法, 如果存在自定义的构造方法,则默认方法就无效,同时构造方法是不能重载的

void main() {
// 注意:new关键字可以省略
var p = new Person("xiaoqiang", 12, "男");
print(p.name); } class Person {
String name;
num age;
String gender;
Person(this.name, this.age, this.gender){
print(this.name);
print(this.age);
print(this.gender);
}
// 如果再定义一个Person方法就会报错
}

可以定义多个构造方法


void main() {
// 注意:new关键字可以省略
var p = new Person("xiaoqiang", 12, "男");
print(p.name);
// 创建对象的时候,可以使用fn构造方法
var p2 = new Person.fn("xiaohong", 12); } class Person {
String name;
num age;
String gender;
Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
print(this.name);
print(this.age);
print(this.gender);
}
Person.fn(name, age) {
print(name);
print(age);
}
}

如果一个类是不可变的,这个时候我们需要使用const来声明构造方法,并且把所有变量都设置为final

import 'dart:math';

void main() {
// 注意:new关键字可以省略
var p = const Person("xiaoqiang", 12, "男");
p.name = "xxx"; // 报错 } class Person {
final String name;
final num age;
final String gender;
const Person(this.name, this.age, this.gender); }

螺钉课堂视频课程地址:http://edu.nodeing.com

dart快速入门教程 (7.1)的更多相关文章

  1. dart快速入门教程 (8)

    9.dart中的库 9.1.自定义库 自定义库我们在前面已经使用过了,把某些功能抽取到一个文件,使用的时候通过import引入即可 9.2.系统内置库 以math库为例: import "d ...

  2. dart快速入门教程 (7.4)

    7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...

  3. dart快速入门教程 (7.3)

    7.4.抽离类为单独文件 新建一个文件,单独存放一个类,例如:Person类抽离到person.dart文件中 class Person { final String name; final num ...

  4. dart快速入门教程 (7.2)

    7.4.抽离类为单独文件 新建一个文件,单独存放一个类,例如:Person类抽离到person.dart文件中 class Person { final String name; final num ...

  5. dart快速入门教程 (2)

    2.变量和数据类型 2.1.变量和常量 变量通俗的说就是可以变化的量,作用就是用来存储数据,你可以把一个变量看作是一个水果篮,里面可以装苹果.梨.香蕉等,常量就是一个固定的值,和变量是相对的,变量可以 ...

  6. dart快速入门教程 (1)

    1.环境搭建 1.1.dart简介 Dart 是一种 易于学习. 易于扩展.并且可以部署到 任何地方 的 应用 编程 语言.Google 使用 Dart 来开发 大型应用.flutter使用dart语 ...

  7. dart快速入门教程 (6)

    6.内置操作方法和属性 6.1.数字类型 1.isEven判断是否是偶数 int n = 10; print(n.isEven); // true 2.isOdd判断是否是奇数 int n = 101 ...

  8. dart快速入门教程 (5)

    5.函数 5.1.函数定义 语法: 返回值类型 函数名(参数类型 参数1, 参数类型 参数2,...) { // 函数体 return '返回值' } 举例: void main() { print( ...

  9. dart快速入门教程 (4)

    4.流程控制 4.1.分支结构 1.if语句 void main() { int score = 80; if (score >= 90) { print('优秀'); } else if (s ...

随机推荐

  1. Rocket - debug - Custom

    https://mp.weixin.qq.com/s/jkBP6ZjEbgm-SVDpLUMjlA 简单介绍Custom的实现. 1. DebugCustomParams 包含两个参数: a. add ...

  2. for循环的嵌套 函数方法

    1.双层for循环:外层循环控制行,内行循环控制列 for循环嵌套例子 用五角星组成一个矩形 // 99乘法表 // for(var i = 1 ;i <= 9 ; i++){ //     f ...

  3. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  4. Java实现 LeetCode 面试题13. 机器人的运动范围(DFS)

    面试题13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动 ...

  5. Java实现 蓝桥杯 历届试题 斐波那契

    试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...

  6. Java实现 LeetCode 126 单词接龙 II

    126. 单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: ...

  7. Java实现 蓝桥杯VIP 算法提高 插入排序

    算法提高 插入排序 时间限制:1.0s 内存限制:256.0MB  插入排序 问题描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序.形式化描述如下:有n个元素a[1],a[2],-,a[ ...

  8. Java实现 LeetCode 48 旋转图像

    48. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示 ...

  9. Linux目录处理命令cd、pwd、rmdir、cp、mv、rm详解

    命令cd详解 命令cd(英文原意:change directory),命令路径及执行权限为: 可以看到它的路径为/usr/bin/cd,因此,它的执行权限是所有用户 基本功能是切换目录,例如:cd . ...

  10. CVE¬-2020-¬0796 漏洞复现(本地提权)

    CVE­-2020-­0796 漏洞复现(本地提权) 0X00漏洞简介 Microsoft Windows和Microsoft Windows Server都是美国微软(Microsoft)公司的产品 ...