AskTs中的类!!!!!!!!!

295 阅读3分钟

AskTs中的类有什么不同???/

追溯其源:

类的概念起源于面向对象编程(Object-Oriented Programming,OOP)的发展。为了更好地组织和管理代码,提高代码的可重用性、可维护性和可扩展性,面向对象编程的思想应运而生。面向对象编程的核心概念包括对象、类、封装、继承和多态。类作为其中的重要概念,其起源可以追溯到 20 世纪 60 年代。

另一个对类的发展产生重要影响的语言是 Smalltalk。Smalltalk 进一步完善了面向对象编程的理念,使得类的概念更加清晰和强大。随着时间的推移,越来越多的编程语言开始支持面向对象编程,并采用了类的概念,如 C++、Java、Python、TypeScript 等。

类的基本理解:

类是面向对象编程中的一个核心概念,它可以被看作是一种自定义的数据类型,用于描述具有相同属性和行为的一组对象的模板或蓝图

从概念上说:

  1. 类定义了对象所具有的属性,和能执行的方法

  2. 它把数据和对数据的操作封装在一起,形成一个独立的,可重复用的单元

    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
  }
}

上述部分参看鸿蒙官方文档

“本文正在参加华为鸿蒙有奖征文征文活动”

上述也是个人看法和想法,不对勿喷,互相学习,共同提升