【Dart】006-类的定义和使用

news2024/11/27 12:42:34

【Dart】006-类的定义和使用

文章目录

  • 【Dart】006-类的定义和使用
  • 一、类的定义
    • 1、概述
    • 2、简单定义与实例化
      • 代码示例
      • 运行结果
    • 3、成员方法
      • 代码示例
      • 运行结果
      • 箭头函数写法
    • 4、get 与 set 关键字
      • 概述
      • 代码示例
      • 运行结果
  • 二、类的构造方法
    • 1、特点
    • 2、完整版的构造方法
      • 简化版
      • 完整版
    • 3、使用命名参数
    • 4、命名构造
  • 三、类中的不可变成员与静态成员
    • 1、不可变成员
      • 代码示例
      • 报错
    • 2、静态成员
      • 代码示例
      • 运行结果
    • 3、静态方法
      • 代码示例
      • 运行结果
  • 四、成员和类的可见性

在编程中, 的目的是组织 数据功能 ,起到封装的作用,提供解决某类特定问题的方案,或方案中的某一环节。

一、类的定义

1、概述

类通过 class 关键字进行定义,其后单词表示 类的名称 。名称之后,通过 {} 表示类定义的作用域,在其中定义类的 成员变量成员方法

class ${className}{
	// 类体
}

2、简单定义与实例化

代码示例

void main(List<String> arguments) {
  // 实例化对象
  Student student = Student('张三', 18);
  // 访问成员变量
  print(student.name);
  print(student.age);
  // 修改成员变量
  student.name = '李四';
  student.age = 20;
  // 再次访问成员变量
  print(student.name);
  print(student.age);
}

/// 学生类
class Student {
  /// 名字
  String name;

  /// 年龄
  int age;

  Student(this.name, this.age);
}

运行结果

张三
18
李四
20

3、成员方法

代码示例

void main(List<String> arguments) {
  // 实例化对象
  Student student = Student('张三', 18);
  // 调用成员方法,获取学生的基本信息描述
  String info = student.getStudentInfo();
  // 打印信息
  print(info);
}

/// 学生类
class Student {
  /// 名字
  String name;

  /// 年龄
  int age;

  Student(this.name, this.age);

  /// 获取学生的基本信息描述
  String getStudentInfo() {
    return '姓名:${this.name},年龄:${this.age}';
  }
}

运行结果

姓名:张三,年龄:18

箭头函数写法

/// 获取学生的基本信息描述
String getStudentInfo() => '姓名:${this.name},年龄:${this.age}';

4、get 与 set 关键字

概述

getset 关键字修饰的是 成员方法 ,其实本质上来说它们只是一种简写方式,常用于对 成员变量 的维护。它只不过是个语法糖而言,本质上仍是方法。

代码示例

void main(List<String> arguments) {
  // 实例化对象
  Student student = Student('张三', 18);
  // getName
  print(student.getName);
  // setName
  student.setName = '李四';
  print(student.getName);
  // getStudentInfo
  print(student.getStudentInfo);
}

/// 学生类
class Student {
  /// 名字
  String name;

  /// 年龄
  int age;

  Student(this.name, this.age);

  /// 获取名字的get方法
  String get getName => name;

  /// 设置名字的set方法
  set setName (String name) => this.name = name;

  /// 获取学生基本信息
  String get getStudentInfo => '姓名:$name,年龄:$age';
}

运行结果

张三
李四
姓名:李四,年龄:18

二、类的构造方法

1、特点

构造方法作为一种特殊的函数,在定义上有一些独有的特点:

  • 【1】构造方法在声明时无 返回值
  • 【2】构造方法 可以 没有方法体。
  • 【3】在参数列表中可以通过 this.成员 ,可以为成员变量进行赋值。

2、完整版的构造方法

简化版

Student(this.name, this.age);

完整版

Student(String name, int age)
    : this.name = name,
	this.age = age;

3、使用命名参数

Student(this.name, { required int thisAge }) : age = thisAge;

4、命名构造

一个类多个构造!

/// 学生类
class Student {
  /// 名字
  String name;

  /// 年龄
  int age;

  /// 默认对象
  Student.defaultObj(): name = "訾博", age = 27;

  /// 二倍年龄
  Student.doubleAge(this.name, int age): age = age * 2;
}

三、类中的不可变成员与静态成员

1、不可变成员

在前面介绍量的定义时,我们知道 final 关键字修饰的成员只能被赋值一次。如果类的一个成员变量使用 final 进行修饰,就表示这个成员不允许进行修改。

代码示例

void main(List<String> arguments) {
  // 实例化对象
  Student student = Student('张三', 18);
  student.name = "訾博";
}

/// 学生类
class Student {
  /// 名字
  final String name;

  /// 年龄
  final int age;
  
  Student(this.name, this.age);
}

报错

image-20230716160421859

2、静态成员

静态成员由 本身直接访问,不依附于 对象

代码示例

void main(List<String> arguments) {
  print(Student.name);
}

/// 学生类
class Student {
  /// 名字
  static String name = "訾博";
}

运行结果

訾博

3、静态方法

static也可以修饰类的成员方法,称为静态方法

代码示例

void main(List<String> arguments) {
  Student.printName("訾博");
}

/// 学生类
class Student {
  /// 打印名字
  static printName(String name) => print(name);
}

运行结果

訾博

四、成员和类的可见性

在Dart中,成员和类可以具有不同的可见性,这由一些访问修饰符控制。这些修饰符确定了在代码中的哪些位置可以访问类或成员。

Dart中有四种可见性修饰符:

  1. public:默认的可见性修饰符。如果没有显式指定修饰符,类和成员默认为公共的。公共成员可以在任何位置被访问。

  2. private:使用下划线 _ 开头的标识符被视为私有的。私有成员只能在同一个库(文件)中被访问,无法从库的外部访问。

    class MyClass {
      String _privateField;
    
      void _privateMethod() {
        // 私有方法的实现
      }
    }
    
    
  3. protected:在Dart中没有直接的 protected 关键字,但可以通过约定来模拟 protected 成员。使用下划线 _ 开头的标识符被视为库内部的私有成员,但可以被子类访问。

    class MyBaseClass {
      String _protectedField;
    
      void _protectedMethod() {
        // 受保护方法的实现
      }
    }
    
    class MyDerivedClass extends MyBaseClass {
      void accessProtectedMember() {
        _protectedField = 'Value'; // 可以在子类中访问受保护字段
        _protectedMethod(); // 可以在子类中调用受保护方法
      }
    }
    
  4. package-private:在Dart中没有直接的 package-private 关键字,但可以通过约定来模拟。如果在定义类或成员时不使用任何可见性修饰符,它将具有包级私有性。包级私有成员只能在同一个包中被访问。

    class _PackagePrivateClass {
      // 包级私有类
    }
    
    void _packagePrivateFunction() {
      // 包级私有函数
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于K8s的Pod的详解(一)

关于K8s的Pod的详解&#xff08;一&#xff09; Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建&#xff0c;调度&#xff0c;管理的基本单位。由上级的Controller对Node上安装的Kubelet发…

最全整理,Pytest自动化测试框架-用例参数/忽略用例/失败重试(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例参数化 …

一零六四、世界杯数据可视化分析(阿里云天池赛)

目录 赛制官方链接 活动背景 活动时间&#xff1a;即日起-12月31日17点 数据说明 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 代码实现 赛制官方链接 世界杯…

LitePal数据库的可视化

依赖 implementation com.amitshekhar.android:debug-db:1.0.0 输入adb forward tcp:8080 tcp:8080 run项目然后浏览器输入 localhost:8080 (保证手机和电脑出于相同wifi下) 效果 点击表格中的数据还可以进行数据的编辑和删除操作

x86架构ubuntu22下运行NDS模拟器DeSmuME

0. 环境 i7 ubuntu22 1. 获取源码 浏览器打开https://github.com/TASEmulators/desmume/releases&#xff0c;下载源码压缩包。 解压 tar -zvxf desmume-release_0_9_13.tar.gz cd desmume-release_0_9_13 2. 源码编译 2.1 build GTK2 or SDL2 frontend with autotools 配置…

【缺陷报告】缺陷报告怎样写会好一些?

目录 标题 描述或总结 影响 前置条件 重现步骤 结果 优先级 重现频率   附件 变通方案&#xff08;Workaround&#xff09; 发生原因分析&#xff08;Root Cause Analysis&#xff09; 环境配置 &#x1f381;更多干货 标题 1. 首先要做一个“标题党”&#xff…

NB!漏洞精准检测与深度利用框架

关注【Hack分享吧】公众号&#xff0c;回复关键字【230526】获取下载链接 工具介绍 这是一款高危漏洞精准检测与深度利用框架&#xff0c;采用框架与插件分离的模式&#xff0c;只做一件事情&#xff1a;精准狙击高危漏洞&#xff0c;适合专业打点人士。 目标探测 精密检测 深…

浏览器中Cookie的全面介绍

简介 在Web前端开发时&#xff0c;我们经常会遇到一些浏览器存储相关的工具&#xff0c;例如Cookie。Cookie的英文本意是曲奇&#xff0c;但是在Web中&#xff0c;它被用作浏览器中存储的数据。Cookie都是namevalue的结构&#xff0c;name和value都为字符串。 使用流程 在首…

2023.7.16-求平方

功能&#xff1a;输入一个整数&#xff0c;显示出不大于这个整数的所有整数的平方。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a0, b;printf("请输入一个整数&#xff1a;");scanf("%d",&a);pr…

Go语言之重要数组类型数组

我们之前学习过变量&#xff0c;当存储一个学生名字时可以name“jack”,但是如果班级有三十人&#xff0c;每个人的名字都想存储到内存中怎么办呢&#xff1f;总不能用三十个变量分别存储吧&#xff0c;这时数组就可以发挥作用了。 数组其实是和字符串一样的序列类型&#xff0…

深入了解加快网站加载时间的 JavaScript 优化技术

目录 01、最小化文件大小 01&#xff09;、JavaScript 代码示例&#xff1a;缩小前后 02、文件压缩 01&#xff09;、Gzip 和 Brotli 压缩方法 02&#xff09;、压缩的服务器端配置 03、捆绑以减少网络请求 01&#xff09;、捆绑说明 02&#xff09;、捆绑工具 03&…

OWASP常见Web安全漏洞

OWASP&常见Web安全漏洞 一、OWASP介绍二、OWASPTOP10与常见漏洞讲解2.1、OWASP Top10 2013 VS 20172.2、OWASP Top10 20212.3、A1&#xff1a;2017 注入2.3.1、SQL注入攻击2.3.2、命令注入攻击 2.4、A2&#xff1a;2017失效的身份认证&#xff08;业务逻辑漏洞&#xff09;…

Linux——动静态库的制作和使用超详细(实操+代码+原理介绍)

动静态库的制作和使用 1️⃣.动静态库介绍&#x1f3c0;静态库⚽️动态库&#x1f3c8;区别&#x1f3d0;使用动态库的优点包括&#xff1a;&#x1f3c9; 使用静态库的优点包括&#xff1a; 2️⃣静态库的制作&#x1f34a;Q:库文件能不能有main()函数&#xff1f;&#x1f34…

clickhouse基础数据类型 语法及使用可视化数据库工具 DBeaver

新建一个名为 test 的数据库&#xff1a;右击数据库点击新增&#xff0c;然后创建一张 test &#xff0c;utf8mb4 字符的&#xff0c;点击确定 在 test 数据库下新建一张数据表&#xff0c;如下所示&#xff1a;右击表&#xff0c;然后点击新建表 鼠标放列上面&#xff0c;右键…

b站视频播放三倍速

目录 一、操作 一、操作 document.querySelector(video).playbackRate 31、F12或者在当前界面鼠标右击选择检查 打开开发者工具平台 2、在console界面执行document.querySelector(video).playbackRate 3 document.querySelector(video).playbackRate 3

vector模拟实现

目录 vector相关接口实现 使用memcpy拷贝问题 迭代器失效 引起失效的操作 指定位置元素的删除操作 ​编辑引起底层空间改变的操作 vector相关接口实现 template<typename T> class vector { public:typedef T* iterator;typedef const T* const_iterator; public:…

基于MSP432P401R跟随小车(一)【2022年电赛】

文章目录 一、赛前准备1. 硬件清单2. 工程环境 二、赛题思考三、软件设计1. 路程、时间、速度计算2. 距离测量3. 双机通信4. 红外循迹 四、技术交流 一、赛前准备 1. 硬件清单 主控板&#xff1a; MSP432P401R测距模块&#xff1a; GY56数据显示&#xff1a; OLED电机&#x…

MinUv2靶场详解

MinUv2靶场详解 这个靶场我学到了.bash_history文件&#xff0c;每个用户都有一个名为 .bash_history 的文件&#xff0c;它位于用户的主目录中&#xff0c;默认有500行最近执行的命令。 这个靶场我用vmware是不能打开的&#xff0c;用virtualBox就可以&#xff0c;并且打开时…

MySQL索引、事务

目录 索引 作用 查看索引 创建索引 删除索引 索引背后的数据结构 B树 B树 事务 事务的本质 事务的特性 并发执行事务产生的问题 脏读问题 不可重复读 幻读 MySQL中隔离级别 read uncommitted readcommitted repeatable read serializable 索引 索引的本质…

SolidUI AI生成可视化,0.1.0版本模块划分以及源码讲解

1.背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&#xff09;与计算机图形学相…