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

【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() {
      // 包级私有函数
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】Function的祖传方法call与apply

引言 内容速递 看了本文您能了解到的知识&#xff01; 在本篇文章中&#xff0c;将带你了解什么是call和apply&#xff0c;call和apply的用途、如何手写call和apply以及call和apply的使用场景。 1、什么是call和apply call()和apply()是JavaScript中的两个内置方法&#xff…

天翎MyApps低代码平台唯品会金牌客服管理系统

项目痛点&#xff1a; 作为一家知名的创新大型电商&#xff0c;唯品会秉承“传承品质生活&#xff0c;提升幸福体验”的企业使命。基于客服铁军锻造项目&#xff0c;实现基于金牌案例的提交、评审、积分&#xff0c;学习功能。 项目中的晋升机制、案例产生学习机制、双激励机制…

STM32之按键驱动的使用和自定义(MultiButton)

原始Github地址 Github地址 修改后 调整内容 将宏定义转换成配置结构体 头文件 #ifndef _MULTI_BUTTON_H_ #define _MULTI_BUTTON_H_#include "stdint.h" #include "string.h"//According to your need to modify the constants. //#define TICKS_IN…

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(四)

UIAbility组件与UI的数据同步 基于HarmonyOS的应用模型&#xff0c;可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。 1.EventHub&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。 2.globalThis&…

MySQL日常操作记录

1.查看MySQL版本 select version();2.快速复制表结构&#xff0c;不包含相关主键及约束 create table user_test as select * from user where 12;3.uuid select uuid(),uuid_short();4.替换uuid()里的’-‘为’’ select replace(uuid(),-,);5.md5摘要 select md5(uuid()…

HBase(一)HBase v2.2 高可用多节点搭建

最近刚刚完成了HBase相关的一个项目,作为项目的技术负责人,完成了大部分的项目部署,特性调研工作,以此系列文章作为上一阶段工作的总结. 前言 其实目前就大多数做应用的情况来讲,我们并不需要去自己搭建一套HBase的集群,现有的很多云厂商提供的服务已经极大的方便日常的应用使…

rce题目

<?php include "flag.php"; highlight_file(__FILE__); if(isset($_GET[HECTF])) { if (; preg_replace(/[^\W]\((?R)?\)/, NULL, $_GET[HECTF])) { if (!preg_match(/pos|high|op|na|info|dec|hex|oct|pi/i, $_GET[HECTF])) { eval(…

NSSCTF刷web(2)

[NISACTF 2022]bingdundun~ bingdundun处感觉像文件包含,改upload为index 发现确实,猜测会补一个后缀.php 那常规文件包含都不行了,这里还有一个文件上传的功能,考虑phar协议 <?php$phar new Phar("test.phar"); $phar->startBuffering(); $phar->setStu…

C++入门学习(2)

思维导图&#xff1a; 一&#xff0c;缺省参数 如何理解缺省参数呢&#xff1f;简单来说&#xff0c;缺省参数就是一个会找备胎的参数&#xff01;为什么这样子说呢&#xff1f;来看一个缺省参数就知道了&#xff01;代码如下&#xff1a; #include<iostream> using std…

算法与数据结构-排序

文章目录 一、如何分析一个排序算法1.1 排序算法的执行效率1.1.1 最好情况、最坏情况、平均情况时间复杂度1.1.1.1 最好、最坏情况分析1.1.1.2 平均情况分析 1.1.2 时间复杂度的系数、常数 、低阶1.1.3 比较次数和交换&#xff08;或移动&#xff09;次数 1.2 排序算法的内存消…

Go语言之重要数组类型map(映射)类型

通过切片&#xff0c;我们可以动态灵活存储管理学生姓名、年龄等信息&#xff0c;比如 names : []string{"张三","李四","王五"} ages : []int{23,24,25} fmt.Println(names) fmt.Println(ages)但是如果我想获取张三的年龄&#xff0c;这是一个…

C# 同构字符串

205 同构字符串 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符…

详细介绍MATLAB中的图论算法

MATLAB是一种功能强大的编程语言和环境,提供了许多用于图论算法的工具和函数。图论是研究图及其属性和关系的数学分支,广泛应用于计算机科学、网络分析、社交网络分析等领域。在MATLAB中,我们可以使用图论算法来解决各种问题,如最短路径问题、最小生成树问题、最大流问题等…

国产MCU-CW32F030开发学习-BH1750模块

国产MCU-CW32F030开发学习-BH1750模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件BH1750数字型光照强度传感器 BH1750 BH1750是一款数字型光照强度传感器&#xff0c;能够获取周围环境的光照强度。其测量范围在0~65535 lx。lx勒克斯&#xff0c;是光照强…

【电路效应】信号处理和通信系统模型中的模拟电路效应研究(SimulinkMatlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、Simulink仿真实现 &#x1f4a5;1 概述 在信号处理和通信系统模型中&#xff0c;模拟电路效应研究是指考虑到实际电路的特性对信号进行建模和分析的过程。模拟电路效应…

Kubernetes—集群故障排查

一、用 Kubectl 调试 Kubernetes 节点 准备开始 你必须拥有一个 Kubernetes 的集群&#xff0c;同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 你的 Kubernetes 服务器版本必须不低于版本 1.2. 要获知版…

C#基础--委托

C#基础–委托 C#基础–委托 简单说它就是一个能把方法当参数传递的对象&#xff0c;而且还知道怎么调用这个方法&#xff0c;同时也是粒度更小的“接口”&#xff08;约束了指向方法的签名&#xff09; 一、什么是委托&#xff0c;委托的本质是什么&#xff1f; 跟方法有点类似…

云迁移第二波热潮来袭,你准备好了吗?

最近&#xff0c;云迁移再次被频繁提及&#xff0c;企业对云迁移的需求量有回升趋势&#xff0c;究其根本&#xff0c;主要有以下原因&#xff1a; 企业数字化进程加速&#xff0c;本地上云需求强劲 根据《2021中国企业上云指数洞察报告》&#xff0c;我国实体经济上云渗透率…

深入理解Java虚拟机(二)Java内存区域与内存溢出异常

一、前言 对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;看起来由虚拟机管理内存一切都很美好。不过&#xff0c;也正是因为Java程序…

kafka接收外部接口的数据,并实现转发

目录 一、什么是kafka 二、kafka接收外部接口数据 三、kafka收到数据后转发 四、kafka总结 一、什么是kafka Kafka是一种分布式流式处理平台&#xff0c;最初由LinkedIn开发。它设计用于高吞吐量、低延迟的数据处理&#xff0c;能够处理大规模的实时数据流。Kafka采用发布…