当前位置: 首页 > news >正文

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言:

本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。

笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。

B站黑马的课程链接:鸿蒙课程介绍_哔哩哔哩_bilibili

往期笔记:

【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础

【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布(附QQ登陆、得物、京东登陆综合案例+代码)

【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局(弹性/层叠)方式与界面开发综合(附飞狗卡片+B站卡片案例+实战开发支付宝界面+代码)

【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符+状态管理(附综合案例美团购物车)

【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)
【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现(类似支付宝集五福)
【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式&结构重用  

【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件

目录

一.Class类

1.class类-属性方法

2.class类-构造函数

3.class类-定义方法&静态方法&静态属性

4.class类-继承extends和super关键字

5.class类-instanceof和typeof

6.class类-类的修饰符


一.Class类

1.class类-属性方法

1)简介:

类是用来 创建对象 模板。

同时类声明也会引入一个 新类型,可定义其 实例属性、方法和构造函数。

2)实例属性:

①用法:

class 类名{//1.实例属性(字段)//字段名、类型、初始值字段名1:类型='xxx'//可选字段可以不设置初始值字段名2?:类型//2.构造函数//3.方法
}
//使用类 实例化对象 基于类 创建对象
//可选字段在使用时需要配合使用 可选链操作符 避免出错
const p:类名 = new 类名()
p.字段名1
p?.字段名2

②实例代码:

class Cat{name:string = 'Tom'foods?:string
}
//基于类,创建对象
let c:Cat = new Cat()
c.name = '河马'
console.log('姓名',c.name)
console.log('食物',c.foods?.length)
//这个问号的意义在于,如果food真的有值则取其长度,如果没有值就取food本身,即为空
let z:Cat = new Cat()
z.name = '荷花'
z.foods = '河马'
console.log('姓名',z.name)
console.log('食物',z.foods?.length)

2.class类-构造函数

1)简介:

不同实例,将来需要有不同的字段初始值,就需要通过构造函数实现。

2)基本语法:

class 类{字段A:类型字段B:类型constructor(参数...) {//通过new 实例化的时候 会调用constructor//通过关键字this 可以获取到实例对象this.字段A = 参数}
}
const 实例化1 = new 类(参数...)
const 实例化2 = new 类(参数...)

3)基础实例代码:

class Food{name:stringprice:number
//希望有不同实例,有不同的字段初始值->构造函数constructor(name:string,price:number) {this.name=namethis.price=price}
}
const f1 = new Food('西红柿鸡蛋',15)
const f2 = new Food('土豆炖鸡块',24)
console.log('名称:',f1.name,'价格:',f1.price)
console.log('名称:',f2.name,'价格:',f2.price)

4)进阶实例代码:

加入了一个interface接口,基于接口方便定义实例参数(无需按照顺序进行输入)

interface IFood{name:stringprice:numberdesc:string
}
class Food{name:stringprice:numberdesc:string//希望有不同实例,有不同的字段初始值->构造函数constructor(paramsObj:IFood) {this.name=paramsObj.namethis.price=paramsObj.pricethis.desc =paramsObj.desc}
}
let  p1:Food = new Food({name:'西兰花',desc:'好吃',price:188
})
let  p2:Food = new Food({name:'黄瓜炒鸡蛋',desc:'清爽',price:3688
})
console.log('菜名:',p1.name,'价格:',p1.price,'描述:',p1.desc)
console.log('菜名:',p2.name,'价格:',p2.price,'描述:',p2.desc)

3.class类-定义方法&静态方法&静态属性

1)简介:

类中可以定义方法,并且在内部编写逻辑。

class 类名{方法名(参数...):返回值类型{//逻辑//可以通过this获取实例对象
}
}

2)实例代码:

class Person{name:stringconstructor(name:string) {this.name = name}
//定义方法sayHi(name:string){console.log(`你好${name},我是:${this.name}`)}
}
const p:Person = new Person('笨猪河马')
//方法调用
p.sayHi('可爱的荷花')

3)静态属性和静态方法:

①简介:

静态属性和静态方法不是给我们实例化对象添加的,是给类添加的,比如定义一个数字工具类中会有π=3.14,e=2.71

①语法:

class 类{static 字段:类型static 方法(){}
}
//使用
类.字段
类.方法()

②实例代码:

class Robot{//如果不设置值,默认是undefinedstatic PI:number = 3.14static version:string = 'v10.12'//工具方法static getRandomNumber(){return Math.random()}
}
//无需实例化对象,直接调用类 没有new 也可以直接用
console.log('机器人版本:',Robot.version)
console.log('生成一个随机数:',Robot.getRandomNumber())
console.log('计算半径为5的圆的面积:',Robot.PI*5*5)

4.class类-继承extends和super关键字

1)简介:

我们在实际使用中各个类之间往往会有很多相似之处,比如说猫和狗,都是动物,我们就可以定义一个动物类作为猫类和狗类的父类。比如程序员和教师都有姓名、年龄、家庭住址、email,只不过能做的职业功能不同,我们就可以添加一个人类(含有姓名、年龄、家庭住址、email四个属性)作为他们的父类。

即把公共部分抽取出来,进行复用,我们的代码就会更加简洁高效。

class 父类{//字段//方法//构造函数
}class 子类 extends 父类{//自己的字段(属性)//自己的方法//可以重写父类的方法
}

2)实例代码:

class Person{name:stringage:numberconstructor(name:string,age:number) {this.name=namethis.age=age}sayHi(){console.log('大家好!','我叫',this.name,'今年',this.age,'岁')}
}class Student extends Person{grade:stringconstructor(name:string,age:number,grade:string) {//父类中的构造函数需要我们手动调用,子类可以访问父类的实例字段、实例方法和构造函数//此时需要手动调用super()构造函数,super.方法名() super.属性名super(name,age)//完成自己属性的初始化this.grade=grade}//子类中想要重写父类的方法,只需要提供同名的方法即可//比如学生想展示一下自己的英文水平sayHi(): void {console.log('Hello!','My name is',this.name,'Now year',this.age,',我的年级是',this.grade)}study(){console.log('我是学生,我爱学点小习')}}
let s1:Student = new Student('河马',74,'大四')
s1.sayHi()
console.log('今年',s1.grade)
s1.study()class Teacher extends Person{}
let t1:Teacher=new Teacher('大卑老师',9999)
t1.sayHi()
class Worker extends Person{}
let w1:Worker=new Worker('修水管的师傅',41)
w1.sayHi()

tips:关于super(),子类可以通过super访问父类的实例字段、实例方法和构造函数。

5.class类-instanceof和typeof

1)简介:

instanceof运算符可以用来检测某个对象是否是某个类的实例

typeof只能用于判断简单类型,如Boolean、string、number等简单类型

2)typeof实例代码:

console.log(typeof 111)
console.log(typeof true)
console.log(typeof 'abc')
class Person{}
class Student extends Person{}
let p:Person = new Person()
let s:Student = new Student()
console.log(typeof p)
console.log(typeof s)

我们在日志中会发现typeof判断简单类型都可以直接显示其类型,但用typeof去判断p和s会显示object

3)instanceof实例代码:

①需求:

定义一个父类→定义子类并继承父类→实例化子类并通过instanceof进行判断→判断数组是否为Array的实例

②代码:

class Person{}
class Student extends Person{}
class Worker{}
let s:Student = new Student()
console.log('s和Student类的instanceof判断结果:',s instanceof Student)
console.log('s和Person类的instanceof判断结果:',s instanceof Person)
console.log('s和Worker类的instanceof判断结果:',s instanceof Worker)

③判断数组代码:

interface IObj{}
//判断一个变量是否存的是数组
let temp=[]
let temp2:IObj={}
//普通对象可以用数组判断
console.log('temp1是否是数组',temp instanceof Array)
//如果是调temp2这种接口里的方法就不能用数组去判断
console.log('temp2是否是数组',temp2 instanceof Array)

6.class类-类的修饰符

1)简介:

类的属性和方法可以通过修饰符来限制访问

修饰符包括:readonly、private、protected和public

省略不写默认为public

2)readonly实例代码:

class Cat{name:stringage:numberreadonly legs:number=4constructor(name:string,age:number) {this.name=namethis.age=age}
}
let c1=new Cat('小花',2)
c1.name='小美'
c1.legs=6 //会报错
console.log('姓名',c1.name)

3)private实例代码:

class Person{private name:string=''private age:number=0
}
class Student extends Person{sayHi(){console.log('访问私有的数据:',super.name)
//私有数据无法在外部(子类)中访问}
}

4)protected修饰符

①简介:

protected修饰符的作用与private修饰符非常相似

不同点是protect修饰的成员允许在派生类(子类)中访问

②代码演示:

class Person{protected  name:string=''private age:number=0
}
class Student extends Person{sayHi(){console.log('访问私有的数据:',super.name)}
}

用protected定义父类的name,一样的代码就可以访问了。

但是在外部访问,一样不允许访问。

class Person{protected  name:string=''private age:number=0constructor(name:string,age:number) {this.name=namethis.age=age}
}
class Student extends Person{sayHi(){console.log('访问私有的数据:',super.name)}
}
let s1:Student =new Student('小华',18)
//外部
console.log('外部访问保护的数据:',s1.name)

感谢阅读。

相关文章:

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言: 本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。 笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。 B站黑马的课程链接&am…...

快速提升波段交易技能:4种实用策略分享

每个交易员的交易偏好是各不相同的,有人偏爱短线交易的迅速反应,有人钟情于中长线的稳健布局,还有人则热衷于波段交易的灵活操作。我们经常探讨短线与中长线的策略,但你了解波段交易的策略吗? 波段交易是什么&#xf…...

LeetCode 11 Container with Most Water 解题思路和python代码

题目: You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…...

【深度学习】损失函数

损失函数(Loss Function)是机器学习和深度学习模型中的一个核心概念,它用于衡量模型的预测输出与真实标签之间的差异。通过优化(最小化)损失函数,模型可以不断调整其内部参数,提升预测性能。不同…...

力扣 中等 46.全排列

文章目录 题目介绍题解 题目介绍 题解 代码如下&#xff1a; class Solution {List<List<Integer>> res new ArrayList<>();// 存放符合条件结果的集合List<Integer> path new ArrayList<>();// 用来存放符合条件结果boolean[] used; // 标记…...

LabVIEW机床加工监控系统

随着制造业的快速发展&#xff0c;机床加工的效率与稳定性成为企业核心竞争力的关键。传统的机床监控方式存在效率低、无法远程监控的问题。为了解决这些问题&#xff0c;开发了一种基于LabVIEW的机床加工监控系统&#xff0c;通过实时监控机床状态&#xff0c;改进生产流程&am…...

第五届智能设计国际会议(ICID 2024)

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus大会时间&#xff1a;2024年10月25-27日大会地点&#xff1…...

厨房用品分割系统源码&数据集分享

厨房用品分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-AFPN-P345等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al ln…...

【HTTPS】深入解析 https

我的主页&#xff1a;2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的&#xff0c;可能会出现运营商劫持等安全问题&#xff0c;运营商通过劫持 http 流量&#xff0c;篡改返回的网页内容&#xff0c;例如广告业务&#xff0c;可能会通过 Referer 字段 来统计是…...

Axios 快速入门

什么是Ajax Ajax 是一种通过 JavaScript 发送异步请求的技术&#xff0c;它的核心是使用 XMLHttpRequest 对象来与服务器交换数据。这种方式较为繁琐&#xff0c;因为需要手动处理请求状态和响应&#xff0c;并且编写的代码往往比较冗长。 相较之下&#xff0c;Axios 是一个基于…...

LabVIEW提高开发效率技巧----调度器设计模式

在LabVIEW开发中&#xff0c;针对多任务并行的需求&#xff0c;使用调度器设计模式&#xff08;Scheduler Pattern&#xff09;可以有效地管理多个任务&#xff0c;确保它们根据优先级或时间间隔合理执行。这种模式在需要多任务并发执行时特别有用&#xff0c;尤其是在实时系统…...

python之认识变量

1、变量 1.1、定义 字面意思来看&#xff0c;会发生改变的量称为变量。 相反的&#xff0c;如果有一个不会发生改变的量&#xff0c;它应该称为不变量&#xff0c;即常量。 1.2、引入变量的原因 主要是为了方便程序员动态的管理、操控数据。 1.3、变量的三要素 名称 类型…...

c++应用网络编程之十Linux下的Poll模式

一、Poll模式 在上一篇文章中提到了Select模式的缺点。既然有缺点&#xff0c;就要改正。但是直接在Select模式上修改不太现实&#xff0c;那么就推出一个新的模式不更香么&#xff1f;poll模式就应运而生了。不过&#xff0c;罗马不是一天建成的&#xff0c;poll模式也只是对…...

[C++][第三方库][RabbitMq]详细讲解

目录 1.介绍2.安装1.RabbitMq2.客户端库 3.AMQP-CPP 简单使用1.介绍2.使用 4.类与接口1.Channel2.ev 5.使用1.publish.cc2.consume.cc3.makefile 1.介绍 RabbitMQ&#xff1a;消息队列组件&#xff0c;实现两个客户端主机之间消息传输的功能(发布&订阅)核心概念&#xff1…...

Next.js 详解

Next.js是一个基于React的开源JavaScript框架&#xff0c;由Vercel&#xff08;原Zeit&#xff09;公司开发。它旨在简化React应用的构建过程&#xff0c;并提供了一系列强大的功能来优化性能和开发体验。以下是对Next.js的详细解析&#xff1a; 一、核心特性 服务器端渲染&…...

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…...

【运维】nginx静态代理资源403权限问题

如题&#xff0c;遇到静态代理资源访问403&#xff0c;可以尝试检查其文件权限&#xff0c;父目录权限&#xff0c;需要确保 "目录使用标准的 755&#xff0c;对文件使用 644&#xff08;umask&#xff1a;022&#xff09;" 参考资料&#xff1a; 1. nginx “403 …...

java家政预约上门系统源码,家政服务平台源码,基于SpringBoot框架,数据库使用MySQL,界面渲染采用Thymeleaf技术开发

自主知识产权的家政预约上门系统源码&#xff0c;java版本&#xff0c;支持二次开发&#xff0c;适合商用上项目。 在这个快节奏的现代生活中&#xff0c;越来越多的家庭开始寻求高效、便捷的家政服务解决方案。传统的家政服务模式已经很难满足人们日益增长的个性化与即时性需求…...

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…...

python数据分析

Python是一种非常流行的编程语言&#xff0c;尤其在数据分析领域。Python拥有丰富的库和框架&#xff0c;可以帮助你执行各种数据分析任务。Python常用的数据分析工具之一&#xff1a;NumPy。 Numpy用于进行大规模数值和矩阵运算&#xff0c;提供了多维数组对象和一系列操作这…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...