热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

文章目录一、Dart面向对象二、类定义三、类的继承四、私有变量五、可选参数与默认参数六、初始化列表七、完整代码示例八、相关资源一、Dart面向对象OOP基本特点:封装:将现实中存


文章目录

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


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
林海书6758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有