首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )

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

作者头像
韩曙亮
发布2023-03-28 21:15:02
发布2023-03-28 21:15:02
2.6K00
举报
运行总次数:0

文章目录

一、 Dart 面向对象


OOP 基本特点 :

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

类中定义的内容 :

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

构造函数 :

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

抽象

  • 抽象类
  • 抽象方法

二、 类定义


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

代码语言:javascript
代码运行次数:0
运行
复制
  // 标准构造方法, 下面的方法是常用的构造方法写法
  Person(this.name, this.age);

重写 Object 父类方法 :

代码语言:javascript
代码运行次数:0
运行
复制
  // 重写父类的方法
  @override
  String toString() {
    return "$name : $age";
  }

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
// 定义 Dart 类
// 与 Java 语言类似, 所有的类默认继承 Object 类
class Person{

  // 定义变量
  String name;
  int age;

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

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

三、 类的继承


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

代码语言:javascript
代码运行次数:0
运行
复制
// 继承
class Student extends Person{
	Student(String name, int age): super(name, age);
}

四、 私有变量


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

代码语言:javascript
代码运行次数:0
运行
复制
  // 私有变量, 以下划线开始的变量是私有变量
  int _grade;

五、 可选参数与默认参数


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

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

代码语言:javascript
代码运行次数:0
运行
复制
// 继承
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);

}

六、 初始化列表


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

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

七、 完整代码示例


代码语言:javascript
代码运行次数:0
运行
复制
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);

}

八、 相关资源


参考资料 :

博客源码下载 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、 Dart 面向对象
  • 二、 类定义
  • 三、 类的继承
  • 四、 私有变量
  • 五、 可选参数与默认参数
  • 六、 初始化列表
  • 七、 完整代码示例
  • 八、 相关资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档