【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)

感谢阅读。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows开发工具使用技巧

在 Windows 上进行开发时,有许多工具和技巧可以提升开发效率和用户体验。以下是一些常用的开发工具和技巧: 常用开发工具 1. Visual Studio Code (VS Code) - 插件管理:利用扩展市场(Extension Marketplace)安装各种…

centos磁盘逻辑卷LVM创建

centos磁盘逻辑卷LVM创建 一、磁盘逻辑卷LVM说明二、centos磁盘使用情况三、LVM安装指南1.LVM工具安装1. yum list lvm2. yum search lvm3. yum search pvcreate4. yum list lvm25. yum install lvm2 2.创建物理卷2.1磁盘情况查看2.2创建物理卷(PV) 3.创…

【CKA】一、基于角色的访问控制-RBAC

1、基于角色的访问控制-RBAC 1. 考题内容: 2. 答题思路: 这道题就三条命令,建议直接背熟就行。 也可以查看帮助 kubectl create clusterrole -h kubectl create serviceaccount -h kubectl create rolebinding -h 注意: 1、资…

windows 桌面采集音频

头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #pragma comment(lib, "winmm.lib")class CaptureAudio { public:CaptureAudio();~CaptureAudio();public:bool Init(const std::…

uniapp中uni.request的统一封装 (ts版)

文章目录 前言一、我们为什么要去封装&#xff1f;二、具体实现1.创建一个请求封装文件&#xff1a;2.封装 uni.request&#xff1a;3.如何去使用&#xff1f; 总结 前言 在uniapp中如何去更简洁高效的发送我们的请求&#xff0c;下面就介绍了uni.request()二次封装。 一、我们…

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…

音视频入门基础:FLV专题(7)——Tag header简介

一、引言 从《音视频入门基础&#xff1a;FLV专题&#xff08;3&#xff09;——FLV header简介》中可以知道&#xff0c; 在FLV header之后&#xff0c;FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Ta…

最新BurpSuite2024.9专业中英文开箱即用版下载

1、工具介绍 本版本更新介绍 此版本对 Burp Intruder 进行了重大改进&#xff0c;包括自定义 Bambda HTTP 匹配和替换规则以及对扫描 SOAP 端点的支持。我们还进行了其他改进和错误修复。 Burp Intruder 的精简布局我们对 Burp Intruder 进行了重大升级。现在&#xff0c;您可…

【Canvas与徽章】金圈蓝底国庆75周年徽章

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金边黑盾75周年</title><style type"text/css"&g…

sql语句牛客练习

文章目录 1. SQL21 浙江大学用户题目回答情况① 错误② 正确 2. SQL22 统计每个学校的答过题的用户的平均答题数① 错误② 正确 3. SQL23 统计每个学校各难度的用户平均刷题数4. SQL25 查找山东大学或者性别为男生的信息① 错误② 正确 5. SQL26 计算25岁以上和以下的用户数量①…

Linux相关概念和重要知识点(11)(进程调度、Linux内核链表)

1.Linux调度算法 上篇文章我粗略讲过queue[140]的结构&#xff0c;根据哈希表&#xff0c;我们可以将40个不同优先级的进程借助哈希桶链入queue[140]中。调度器会根据queue的下标来进行调度。但这个具体的调度过程是怎样的呢&#xff1f;以及runqueue和queue[140]的关系是什么…

DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统

1、项目功能演示 DC00025【含文档】基于springboot短视频推荐管理系统协同过滤算法视频推荐系统javaweb开发程序设计vue 2、项目功能描述 短视频推荐系统分为用户和系统管理员两个角色 2.1 用户角色 1、用户登录、用户注册 2、视频中心&#xff1a;信息查看、视频收藏、点赞、…

Leecode热题100-84.柱状图中的最大矩形

给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&#xff1a;最大的矩形为图…

Python核心知识:pip使用方法大全

什么是 pip&#xff1f; pip 是 Python 的包管理工具&#xff0c;允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程&#xff0c;使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具&#xff0c;并且自 Python …

SQL第10课挑战题

1. 从OrderItems表中返回每个订单号order_num各有多少行数order_lines&#xff0c;并按order_lines对结果进行排序 2. 返回名为cheapest_item的字段&#xff0c;该字段包含每个供应商成本最低的产品&#xff08;使用products表中的prod_price)&#xff0c;然后从最低成本到最高…

房屋水电费:重新布局,重构JS代码

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>房租水电费</title><script type"…

计算机网络:计算机网络概述:网络、互联网与因特网的区别

文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…

「安装」 Windows下安装CUDA和Pytorch

「安装」 Windows下安装CUDA和Pytorch 文章目录 「安装」 Windows下安装CUDA和PytorchMac、Linux、云端Windows安装CUDA安装miniconda安装PyTorch测试总结 其他 Mac、Linux、云端 Mac、Linux、云端安装Miniconda和Pytorch的方法参考其他资料。 Windows 下面进行Windows下安装…

VB.net读写NDEF标签URI智能海报WIFI蓝牙连接

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 Public Class Form1Dim oldpicckey(0 To 5) As Byte 卡片旧密码Dim newpicckey(0 To 5) As Byte 卡片新密码Function GetTagUID() As StringDim status As ByteDim myctrlword As …

Python编程和开发过程中让人编程效率和舒适度很高的工具Anaconda

编程工作为什么需要提高效率&#xff1f; 在日益繁忙的工作环境中&#xff0c;选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度&#xff0c;甚至让团队协作更加顺畅。 那么&#xff0c;编写python代码过程中…