天天看点

TypeScript之面向对象

面向对象

面向对象是程序中一个重要的思想。所谓对象,就是计算机程序对现实世界的事物的抽象,即现实中的事物在程序中表现为对象。而程序中的对象都被分为数据和功能两大部分,以人为例,人有姓名,年龄,性别等数据,在程序中称为对象的属性。同时,人有吃饭,走路,睡觉等功能,在程序中称为对象的方法。而面向对象就是指程序的一切操作都是通过对象来完成的。

TypeScript之面向对象

面向对象编程首先要创建对象。要创建对象就得先创建类。类可以理解为对象的模型,程序中根据类可以创建指定类型的对象。如通过Person类可以创建人的对象,通过Car类可以创建车对象。

TypeScript之面向对象
  • 定义类
class 类名 {
  
  属性名:类型;
  
  constructor(参数:类型) {
    this.属性名 = 参数
  }
  
  方法名(){
    ……
  }
}           
  • 实例展示
//定义一个人的类
class Person {
  
  name:string;
  age:number;
  
  //静态属性(类属性),通过类名调用
  static sex = "男"
  constructor(name:string,age:number) {
    this.name = name
    this.age = age
  }
  
  sayHi(){
    console.log(this.name+"跟你打了声招呼!!")
  }
}           
  • 继承

类的继承是指在现有类的基础上去构建一个新的类,新的类配称为子类,现有类称为子类的父类或基类。子类可以继承父类的属性和方法。以上面Person类为例,我们可以在他的基础上创建Chinese类和American类分别表示中国人和美国人。

TypeScript之面向对象
  • 语法
class 子类 extends 父类{
  
  子类特有属性:类型;
  
  //子类构造函数
  constructor(参数1:类型,参数2:类型,参数3:类型){
    //super可以用来调用父类的属性,方法和构造函数
    super(参数1,参数2); //调用父类构造函数
    this.属性名 = 参数3
  }
  
  方法名(){
     ……
  }
  
  父类方法名(){
    ……
    }
}           
  • 实例展示
class Chinese extends Person{
  
  country:string;
  
  constructor(name:string,age:number,country:string){
    super(name,age);
    this.country = country
  }
  
  //重写Person类sayHi()方法
  sayHi(){
    console.log(`${this.name}说了声你好`)
  }
  
   //新增speakChinese()方法
  speakChinese(){
    console.log(`${this.name}会说中文`)
  }
}           

多态

在上面的实例中,我们看到了子类对父类的sayHi()方法的实现过程进行了重新编写,这种情况被我们称为重写。

  • 重写

重写也叫覆盖。指子类对父类已有的非静态,非private,非final方法的实现过程进行重新编写。返回值和形参不能改变,与父类保持一致。即外壳不变,核心重写。同时,重写是实现多态的先决条件,没有重写就没有多态。

  • 多态

多态主要是指子类对同一方法产生不同的行为。因此,多态是建立在继承的基础上产生的,先有继承才有多态。同时,我通过在父类创建方法,然后在不同子类中进行各自的重写,以此来达到多态。

属性的封装

  • 修饰符

TS可以在属性之前添加属性修饰符,具体的属性修饰符有如下几种:

public:公共属性。被public修饰的属性可以在任意位置访问或修改默认值;

protected:受保护属性。被protected修饰的属性只能在当前类和当前类的子类中访问;

private:私有属性。被private修饰的属性只能在当前类访问,其他位置都无法访问;           
  • 语法

在TS中我们通过private对属性进行封装,通过设置get()和set()方法访问和修改属性。具体语法如下:

class 类名 {
  
  private _属性名:类型;
  
  constructor(参数:类型) {
    this._属性名 = 参数
  }

  get 属性名(){
    return this._属性名
  }

  set 属性名(参数:类型){
    this._属性名 = 参数
  }

}

let 实例 = new 类名(实参);

// 外部环境获取属性
console.log(实例.属性名);

// 外部环境修改属性
实例.属性名 = 值;           
  • 实例展示
class Person {
  private _name:string;
  private _age:number;

  constructor(name:string,age:number) {
    this._name = name
    this._age = age
  }
	
  get name(){
    return this._name
  }

  set name(value:string){
    this._name = value
  }

  get age(){
    return this._age;
  }

  set age(value:number){
    this._age = value
  }
}

let p = new Person("吴名小卒",18);

console.log(p.name,p.age)

p.age = 20

console.log(p.age)           
  • 输出结果
TypeScript之面向对象

总结

本篇文章主要以Typescript语法为核心,围绕面向对象编程理论对TS的重要知识进行讲述。主要简述了如何通过TS语法进行类的创建,类的继承,多态的实现,属性的封装。

继续阅读