文章目录

  • 一、 Dart 面向对象
  • 二、 类定义
  • 三、 类的继承
  • 四、 私有变量
  • 五、 可选参数与默认参数
  • 六、 初始化列表
  • 七、 完整代码示例
  • 八、 相关资源

一、 Dart 面向对象


OOP 基本特点 :

  • 封装 : 将现实中存在的事务封装成类 ;
  • 继承 : 使用现有类的功能 , 无需重写现有类的变量及方法 , 只实现扩展内容 ;
  • 多态 : 子类对象可以赋值给父类类型变量 ;

类中定义的内容 :

  • 变量 : 静态变量 , 实例变量 ;
  • 函数 : 构造函数 , 实例函数 , 静态函数 ;

构造函数 :

  • 标准构造函数
  • 初始化列表函数
  • 工厂构造方法

抽象

  • 抽象类
  • 抽象方法

二、 类定义


使用 class 关键字 , 定义 Dart 类 , 所有的 Dart 类默认继承 Object 类 , 其中定义两个变量 , 定义一个标准的构造方法 , 构造方法中使用 this.name 表示自有参数 ;

  // 标准构造方法, 下面的方法是常用的构造方法写法Person(this.name, this.age);

重写 Object 父类方法 :

  // 重写父类的方法@overrideString toString() {return "$name : $age";}

代码示例 :

// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{// 定义变量String name;int age;// 标准构造方法, 下面的方法是常用的构造方法写法Person(this.name, this.age);// 重写父类的方法@overrideString toString() {return "$name : $age";}
}

三、 类的继承


使用 extends 关键字定义子类 , 注意如果父类有非空参数的构造函数, 子类必须实现相同参数的构造函数 ;

// 继承
class Student extends Person{Student(String name, int age): super(name, age);
}

四、 私有变量


以下划线开始的变量是私有变量 ;

  // 私有变量, 以下划线开始的变量是私有变量int _grade;

五、 可选参数与默认参数


可选参数 : 可选参数必须在构造函数参数列表中最后一个 , {this.school} 是可选参数 ;

默认参数 : 可选参数中如果用户不初始化该可选参数 , 那么为其指定一个默认值 , {this.city = “北京”} 指定了如果用户不初始化 city 变量, 那么为其初始化 “北京” 字符串值 ;

// 继承
class Student extends Person{// 私有变量, 以下划线开始的变量是私有变量int _grade;String school;String city;String address;// 如果父类有非空参数的构造函数, 子类必须实现相同参数的构造函数// 如果该类有父类 , 那么先调用父类的构造方法 , 完成父类的初始化// 然后才能完成自己的初始化// this.school 指定自有参数// {this.school} 是可选参数, 可选参数必须在构造函数参数列表中最后一个// 默认参数 : 可选参数中如果用户不初始化该可选参数 , 那么为其指定一个默认值// {this.city = "北京"} 指定了如果用户不初始化 city 变量, 那么为其初始化 "北京" 字符串值Student(this._grade, String name, int age,{this.school, this.city = "北京"}) : super(name, age);}

六、 初始化列表


初始化列表 : 冒号后面的内容就是初始化列表 , 父类构造器也是初始化列表 , 除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量 , 不同的初始化实例变量之间使用逗号隔开 ;

  // 初始化列表 : 冒号后面的内容就是初始化列表//            父类构造器也是初始化列表//            除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量//            不同的初始化实例变量之间使用逗号隔开// 父类构造方法 : 如果父类没有默认构造方法 (无参构造方法) ,//              必须在初始化列表中调用父类构造函数 , super(name, age) ;// 构造方法方法体 : 可以省略 ;Student(this._grade, String name, int age,{this.school, this.city = "北京"}): address = "北京市海淀区" ,super(name, age);

七、 完整代码示例


import 'package:flutter/material.dart';class Dart_OOP extends StatefulWidget {@override_Dart_OOPState createState() => _Dart_OOPState();
}class _Dart_OOPState extends State<Dart_OOP> {@overrideWidget build(BuildContext context) {return Container(child: Text('Dart 面向对象'));}
}// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{// 定义变量String name;int age;// 标准构造方法, 下面的方法是常用的构造方法写法Person(this.name, this.age);// 重写父类的方法@overrideString toString() {return "$name : $age";}
}// 继承
class Student extends Person{// 私有变量, 以下划线开始的变量是私有变量int _grade;String school;String city;String address;// 如果父类有非空参数的构造函数, 子类必须实现相同参数的构造函数// 如果该类有父类 , 那么先调用父类的构造方法 , 完成父类的初始化// 然后才能完成自己的初始化// this.school 指定自有参数// {this.school} 是可选参数, 可选参数必须在构造函数参数列表中最后一个// 默认参数 : 可选参数中如果用户不初始化该可选参数 , 那么为其指定一个默认值// {this.city = "北京"} 指定了如果用户不初始化 city 变量, 那么为其初始化 "北京" 字符串值// 初始化列表 : 冒号后面的内容就是初始化列表//            父类构造器也是初始化列表//            除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量//            不同的初始化实例变量之间使用逗号隔开// 父类构造方法 : 如果父类没有默认构造方法 (无参构造方法) ,//              必须在初始化列表中调用父类构造函数 , super(name, age) ;// 构造方法方法体 : 可以省略 ;Student(this._grade, String name, int age,{this.school, this.city = "北京"}): address = "北京市海淀区" ,super(name, age);}

八、 相关资源


参考资料 :

  • Flutter 官网 : https://flutter.dev/ ( 被墙 )
  • Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 )
  • 官方 GitHub 地址 : https://github.com/flutter
  • Flutter 中文社区 : https://flutter.cn/
  • Flutter 实用教程 : https://flutter.cn/docs/cookbook
  • Flutter CodeLab : https://codelabs.flutter-io.cn/
  • Dart 中文文档 : https://dart.cn/
  • Dart 开发者官网 : https://api.dart.dev/
  • Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
  • Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )

博客源码下载 :

  • GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 随博客进度一直更新 , 有可能没有本博客的源码 )

  • 博客源码快照 : https://download.csdn.net/download/han1202012/15117222 ( 本篇博客的源码快照 , 可以找到本博客的源码 )

【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )相关推荐

  1. JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态

    一.认识class定义类 我们会发现,按照前面的构造函数形式创建 类,不仅仅和编写普通的函数过于相似,而且代码并不容易理解. 在ES6(ECMAScript2015)新的标准中使用了class关键字来 ...

  2. Python类定义字类变量与实例变量

    学过JAVA或C++等语言的程序员再去学Python类设计时感觉非常不适应,因为Python是在太自由了,让人无所适从,来python定义类时的变量来说,其定义方式.作用域.操作方法都与上述两种语言有 ...

  3. 【Python面向对象编程】第08篇 私有变量

    本篇我们介绍封装(encapsulation)的概念,以及如何在 Python 中利用私有属性实现封装. 封装的概念 面向对象编程包含四个基本的概念:抽象.封装.继承以及多态.封装是指将数据和功能包装 ...

  4. java 继承 私有变量_java – 继承和私有变量

    在HourlyEmployee和SalariedEmployee子类中,我们调用super()将"name"传递给基类构造函数.我有两个问题: >变量名称来自哪里,这是aNa ...

  5. 在python中可以用什么关键字来声明一个类_Python 定义类

    说明 Python 教程正在编写中,欢迎大家加微信 sinbam 提供意见.建议.纠错.催更. 类是面向对象开发的核心思想,可以解决我们现实生活的复杂问题.在了解了类的基本概念,我们来学习一下怎么定义 ...

  6. 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )

    文章目录 类的定义 ( 头文件引用次数控制 ) 类的实现 ( 构造函数 | 析构函数 ) CMake 编译配置 类测试 ( 构造析构调用测试 ) 类的定义 ( 头文件引用次数控制 ) 类定义 , 类一 ...

  7. (教学思路 c#之类一)声明类和对象、定义类成员及其引用

    上一节(教学思路 c#之面向对象二)初步理解面向对象的基本概念中,我没有提到任何的代码,只是用语言和实例来说明什么是类和对象以及面向对象的特性等基本概念,类是c#程序语言的重要核心,也是构建应用程序最 ...

  8. 8.类定义、属性、初始化和析构

            类定义        类 是一个独立存放变量(属性/方法)的空间 封装: 类可以把各种对象组织在一起,作为类的属性,通过 . (点)运算符来调用类中封装好的对象 属性: 变量在类中称为 ...

  9. python类定义变量_python类变量与__init__声明变量的区别

    类变量:可在类的所有实例之间共享的变量 实例类对象:类的实例是调用类对象来创建的.如:par = Parent(),par就是类Parent的一个实例类对象. 实例变量(成员变量):同一个类对象可以创 ...

最新文章

  1. Python入门学习---第三天
  2. 携程Apollo(阿波罗)配置中心在.NET Core项目快速集成
  3. java中跨时区的日期格式转换
  4. idea警告Cannot resolve MVC View
  5. php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?
  6. DWZ中navTab使用解析
  7. 经常读书与不读书的人有什么区别?
  8. ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
  9. R语言的特征选择(Feature Selection)包:Boruta和caret
  10. 在 tornado 中异步无阻塞的执行耗时任务
  11. 七日年化收益率计算器_定投收益率该怎么算?
  12. Ajax的Promise应用
  13. python turtle 绘制北京天安门
  14. Windows GetLastError返回值 【转】
  15. 2019全球人工智能技术大会在宁举办
  16. Linux基础知识命令总结1
  17. c语言高级编程培训,C语言高级编程
  18. 汇丰,用数字技术创新奇妙体验
  19. Oracle DataGuard介绍
  20. 解决gradle project refresh failed

热门文章

  1. jsp response对象
  2. Oracle感慨(转)
  3. Bind和Eval的区别详解
  4. 【Python3_基础系列_009】Python3-条件语句-If
  5. sql中去掉换行符和回车符
  6. IBM HACMP 系列 -- 安装和配置三
  7. ScriptManager 帮助您实现 Web 应用程序的 AJAX 功能
  8. day26-3 模拟ssh远程执行命令
  9. BCB写的简单的EXCEL合并
  10. 查找 之 散列表查找(哈希表)