【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
一、 Dart 面向对象
OOP 基本特点 :
- 封装 : 将现实中存在的事务封装成类 ;
- 继承 : 使用现有类的功能 , 无需重写现有类的变量及方法 , 只实现扩展内容 ;
- 多态 : 子类对象可以赋值给父类类型变量 ;
类中定义的内容 :
- 变量 : 静态变量 , 实例变量 ;
- 函数 : 构造函数 , 实例函数 , 静态函数 ;
构造函数 :
- 标准构造函数
- 初始化列表函数
- 工厂构造方法
抽象
- 抽象类
- 抽象方法
二、 类定义
使用 class 关键字 , 定义 Dart 类 , 所有的 Dart 类默认继承 Object 类 , 其中定义两个变量 , 定义一个标准的构造方法 , 构造方法中使用 this.name 表示自有参数 ;
// 标准构造方法, 下面的方法是常用的构造方法写法
Person(this.name, this.age);
- 1
- 2
重写 Object 父类方法 :
// 重写父类的方法
@override
String toString() {
return "$name : $age";
}
- 1
- 2
- 3
- 4
- 5
代码示例 :
// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{
// 定义变量
String name;
int age;
// 标准构造方法, 下面的方法是常用的构造方法写法
Person(this.name, this.age);
// 重写父类的方法
@override
String toString() {
return "$name : $age";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
三、 类的继承
使用 extends 关键字定义子类 , 注意如果父类有非空参数的构造函数, 子类必须实现相同参数的构造函数 ;
// 继承
class Student extends Person{
Student(String name, int age): super(name, age);
}
- 1
- 2
- 3
- 4
四、 私有变量
以下划线开始的变量是私有变量 ;
// 私有变量, 以下划线开始的变量是私有变量
int _grade;
- 1
- 2
五、 可选参数与默认参数
可选参数 : 可选参数必须在构造函数参数列表中最后一个 , {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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
六、 初始化列表
初始化列表 : 冒号后面的内容就是初始化列表 , 父类构造器也是初始化列表 , 除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量 , 不同的初始化实例变量之间使用逗号隔开 ;
// 初始化列表 : 冒号后面的内容就是初始化列表
// 父类构造器也是初始化列表
// 除了父类构造方法之外 , 还可以在子类构造方法体之前初始化示例变量
// 不同的初始化实例变量之间使用逗号隔开
// 父类构造方法 : 如果父类没有默认构造方法 (无参构造方法) ,
// 必须在初始化列表中调用父类构造函数 , super(name, age) ;
// 构造方法方法体 : 可以省略 ;
Student(this._grade, String name, int age,
{this.school, this.city = "北京"})
: address = "北京市海淀区" ,
super(name, age);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
七、 完整代码示例
import 'package:flutter/material.dart';
class Dart_OOP extends StatefulWidget {
@override
_Dart_OOPState createState() => _Dart_OOPState();
}
class _Dart_OOPState extends State<Dart_OOP> {
@override
Widget build(BuildContext context) {
return Container(child: Text('Dart 面向对象'));
}
}
// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{
// 定义变量
String name;
int age;
// 标准构造方法, 下面的方法是常用的构造方法写法
Person(this.name, this.age);
// 重写父类的方法
@override
String 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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
八、 相关资源
参考资料 :
- 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 ( 本篇博客的源码快照 , 可以找到本博客的源码 )
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/113735644
- 点赞
- 收藏
- 关注作者
评论(0)