AskTs中的类有什么不同???/
追溯其源:
类的概念起源于面向对象编程(Object-Oriented Programming,OOP)的发展。为了更好地组织和管理代码,提高代码的可重用性、可维护性和可扩展性,面向对象编程的思想应运而生。面向对象编程的核心概念包括对象、类、封装、继承和多态。类作为其中的重要概念,其起源可以追溯到 20 世纪 60 年代。
另一个对类的发展产生重要影响的语言是 Smalltalk。Smalltalk 进一步完善了面向对象编程的理念,使得类的概念更加清晰和强大。随着时间的推移,越来越多的编程语言开始支持面向对象编程,并采用了类的概念,如 C++、Java、Python、TypeScript 等。
类的基本理解:
类是面向对象编程中的一个核心概念,它可以被看作是一种自定义的数据类型,用于描述具有相同属性和行为的一组对象的模板或蓝图
从概念上说:
-
类定义了对象所具有的属性,和能执行的方法
-
它把数据和对数据的操作封装在一起,形成一个独立的,可重复用的单元
class Person { //属性 name: string age: number //构造函数 constructor(name: string, age: number) { this.name = name this.age = age } //方法 sayHello() { console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`) } }
定义一个空的类:class 类名{},刚开始这个类并不是很有用,所以要往其中添加一些成员,才能让其变得能为我们所用,我们可以在{}中定义我们用的公共的可写的属性,{}这里面,被我戏称为领域。
如:上述中代码,在Person类中,name和age就是属性,分别为string和number类型。
sayHello(){}就是我们所定义的公共可写的方法,用于输出对象的相关属性
constructor则是相对来说比较重要的,其称为构造函数,用于创建类的实列时进行初始化的操作。类构造函数与函数非常相似, 你可以添加带有类型注释、默认值和重载的参数:
如果你不想写构造函数,则必须在属性中给字段一个初始值!!!!!不然会报错
在构造函数中,通过this获取实列对象,而在领域内,可以通过this访问到所有成员!!!
属性方法:
类中除了有实列属性和实列方法,还有静态属性、静态方法
实例属性和方法:
概念:实例属性是属于类的每个实例(对象)的属性,每个实例都有自己独立的属性值。实例方法是操作实例属性的方法。
class Person {
// 实例属性
name: string
// 构造函数,用于初始化实例属性
constructor(name: string) {
this.name = name
}
// 实例方法
sayHello() {
console.log(`Hello, I'm ${this.name}`)
}
}
const person = new Person('Alice')
person1.sayHello()
上述中,name是实列属性,sayHello是实列方法
静态属性和方法:
概念:静态属性和方法属于类本身,而不是类的实例。可以通过类名直接访问,不需要创建实例。
class math {
// 静态属性
static PI = 3.14159
// 静态方法
static mathtype(radius: number) {
return this.PI * radius
}
}
console.log('',math.PI)
上述中,在这个 math 类中,PI 是静态属性,mathtype 是静态方法。可以直接通过 math 类来访问和使用它们,而无需创建math 的实例。
其中,实列属性和静态属性的调用方法不同,实列属性的调用是通过 const person = new Person('Alice') person1.sayHello()中的person来调用的。而静态属性中是通过类名直接调用的 console.log('',math.PI)中的math.PI
继承
接下来要说的是面向对象编程的三大特性其中的一个继承
继承(Inheritance)的概念大概是:允许一个类从另一个类获取属性和方法,从而实现代码的复用和层次化的类结构。
通俗一点讲就是:子类可以继承父类的属性和方法,一般情况下可以进行扩展和重写
//父类
class Person {
name: string='小华'
age: number=13
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
//子继承父
class Son extends Person{
//扩展的属性
myheight:string='1.70m'
//重写的方法
sayHello(){
console.log(`我的身高${this.myheight}`)
}
}
在继承中还有一个比较重要的关键词:super
子类可以通过super访问父类的实列字段、实列方法构造函数
基本写法:
class 父类 {
}
class 子类 extends 父类 {
constructor() {
super() // 调用父类构造函数
}
}
实列用法:
class Parent {
name:string
constructor(name: string) {
this.name=name
}
}
class Child extends Parent {
age:string
constructor(name: string,age: number) {
super(name) // 调用父类的构造函数
this.age=age
}
}
上述部分参看鸿蒙官方文档
“本文正在参加华为鸿蒙有奖征文征文活动”
上述也是个人看法和想法,不对勿喷,互相学习,共同提升