TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符

yizhihongxing

TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符

类的定义

TypeScript 是 JavaScript 的超集,所以它具有 JavaScript 的所有语法,并且添加了一些新的特性。在 TypeScript 中,我们可以使用类来定义对象,它们是创建对象的蓝图,可以描述对象的属性和方法。

类的语法

类的语法如下所示:

class ClassName {
    // 属性和方法
}

其中,ClassName 表示类的名称。一个类可以包含属性和方法,它们定义在类的大括号内。

类的属性和方法

在 TypeScript 类中,可以通过成员变量定义属性,可以通过成员方法定义方法。

例如,下面是一个 Person 类的示例:

class Person {
    name: string;  // 成员变量:姓名
    age: number;   // 成员变量:年龄

    sayHello(): void {            // 成员方法:打招呼
        console.log('Hello!');
    }

    sayName(): void {             // 成员方法:自我介绍
        console.log(`My name is ${this.name}.`);
    }
}

在上面的示例中,Person 类包含了两个成员变量 nameage,以及两个成员方法 sayHello()sayName()

在成员方法中,有一个特殊的关键字 this,表示对当前对象的引用。在上面的示例中,sayName() 方法中的 this.name 表示调用方法的对象的 name 属性。

类的实例化

创建类的实例,即创建类的对象,使用 new 关键字,如下所示:

let person = new Person();
person.name = 'Alice';
person.age = 18;
person.sayHello();  // 输出:Hello!
person.sayName();   // 输出:My name is Alice.

类的继承

TypeScript 支持类的继承,允许我们创建一个类,它从另一个类继承属性和方法。继承的类称为子类或派生类,被继承的类称为父类或基类。子类继承了父类的所有属性和方法,并且可以添加自己的属性和方法。

继承语法

继承语法如下所示:

class ChildClass extends ParentClass {
    // 子类的属性和方法
}

其中,ChildClass 为子类名称,ParentClass 为父类名称。子类可以访问父类的所有属性和方法,并可以添加自己的属性和方法。

继承示例

例如,下面是一个 Teacher 类继承自 Person 类的示例:

class Teacher extends Person {
    subject: string;  // 子类的属性:教授课程

    teach(): void {   // 子类的方法:教学
        console.log(`I am teaching ${this.subject}.`);
    }
}

在上面的示例中,Teacher 类继承了 Person 类的属性和方法,并添加了自己的属性 subject 和方法 teach()

可以通过以下方式创建 Teacher 类的实例,并调用它的属性和方法:

let teacher = new Teacher();
teacher.name = 'Bob';
teacher.age = 25;
teacher.subject = 'Math';
teacher.sayHello();  // 输出:Hello!
teacher.sayName();   // 输出:My name is Bob.
teacher.teach();     // 输出:I am teaching Math.

类成员修饰符

类成员修饰符可以控制类的属性和方法的访问权限。TypeScript 支持三种类成员修饰符。它们分别是:

  • public:默认值,表示公共属性或方法,可以被子类和类的实例访问。
  • protected:表示受保护的属性或方法,只能被子类访问。
  • private:表示私有属性或方法,只能被类本身访问,不能被子类和类的实例访问。

类成员修饰符示例

例如,下面是一个 Student 类的示例,展示了类成员修饰符的使用:

class Student {
    public name: string;        // 公共属性:姓名
    protected age: number;     // 受保护的属性:年龄
    private grade: number;     // 私有属性:成绩

    constructor(name: string, age: number, grade: number) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }

    public sayHello(): void {
        console.log('Hello!');
    }

    protected sayAge(): void {
        console.log(`I am ${this.age} years old.`);
    }

    private sayGrade(): void {
        console.log(`My grade is ${this.grade}.`);
    }

    public getInfo(): void {
        this.sayHello();
        this.sayAge();
        this.sayGrade();
    }
}

class ElementaryStudent extends Student {
    constructor(name: string, age: number, grade: number) {
        super(name, age, grade);
    }

    public study(): void {
        console.log('I am studying in the elementary school.');
    }
}

在上面的示例中,Student 类包含了三个属性和三个方法,每个成员都有不同的修饰符。在 Student 类中,name 属性为公共属性,可以被类的实例和子类访问,在构造函数中赋值;age 属性为受保护的属性,只能被子类访问;grade 属性为私有属性,只能被类本身访问,在构造函数中赋值。sayHello() 方法为公共方法,可以被类的实例和子类访问;sayAge() 方法为受保护的方法,只能被子类访问;sayGrade() 方法为私有方法,只能被类本身访问。getInfo() 方法为公共方法,可以被类的实例和子类访问,在内部调用了 sayHello()sayAge()sayGrade() 方法。ElementaryStudent 类继承了 Student 类,可以访问 Student 类的公共和受保护的属性和方法,并添加了自己的公共方法 study()

可以通过以下方式创建 Student 类和 ElementaryStudent 类的实例,并调用它们的属性和方法:

let student = new Student('Alice', 15, 85);
student.name = 'Ali';
student.sayHello();  // 输出:Hello!
student.sayAge();    // 报错:属性“age”受保护,只能在类“Student”及其子类中访问。
student.sayGrade();  // 报错:属性“grade”为私有属性,只能在类“Student”中访问。
student.getInfo();   // 输出:Hello!  I am 15 years old.  My grade is 85.

let elementaryStudent = new ElementaryStudent('Bob', 12, 92);
elementaryStudent.study();    // 输出:I am studying in the elementary school.
elementaryStudent.sayHello(); // 输出:Hello!
elementaryStudent.sayAge();   // 报错:属性“age”受保护,只能在类“Student”及其子类中访问。
elementaryStudent.sayGrade(); // 报错:属性“grade”为私有属性,只能在类“Student”中访问。
elementaryStudent.getInfo();  // 输出:Hello!  I am 12 years old.  My grade is 92.

结束语

本篇文章主要介绍了 TypeScript 类的定义、类的继承和类成员修饰符的相关知识。了解这些知识对于深入理解 TypeScript 的面向对象编程非常重要。同时,通过本篇文章的示例代码,可以更好地了解类的继承和类成员修饰符的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TypeScript 学习笔记之 typeScript类定义,类的继承,类成员修饰符 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • vue 首页加载,速度优化及解决首页白屏的问题

    针对“vue 首页加载,速度优化及解决首页白屏的问题”,我的建议是: 一、速度优化 1. 图片优化 图片是页面加载速度较慢的主要原因之一。因此在网站中使用的图片需要进行优化,以减少其大小。优化图片的方法有: 压缩图片:使用工具对图片进行压缩,如TinyPNG、Kraken等工具可以对图片进行无损或有损压缩,减小图片的大小。 懒加载:对于长页面,可以使用懒加载…

    other 2023年6月25日
    00
  • druid0.17入门(3)——数据接入指南

    Druid是一款开源的分布式数据存储和分析系统,可以用于实时数据处理和分析。以下是Druid数据接入的基本步骤: 安装Druid 首先需要安装Druid,可以从官网下载安装包进行安装。 配置数据源 在Druid中,需要配置数据源,可以使用以下数据源: Kafka Hadoop JDBC S3 配置数据源的方法因数据源而异,可以参考Druid官方文档进行配置。…

    other 2023年5月5日
    00
  • Vue框架中正确引入JS库的方法介绍

    Vue框架中正确引入JS库的方法介绍 在Vue框架中,正确引入JS库是非常重要的,它可以确保库的功能正常运行,并且与Vue的生命周期和组件通信进行良好的集成。下面是一些正确引入JS库的方法介绍。 1. 使用CDN引入 CDN(Content Delivery Network)是一种通过网络分发资源的方式,可以通过在HTML文件中引入外部脚本来使用JS库。这是…

    other 2023年7月29日
    00
  • Win10界面图标变白怎么办 win10软件图标变白的解决办法

    问题描述:Win10界面图标变白怎么办? 答:Win10界面图标变白可能由于以下原因所致: Win10系统升级或更新过程中出现异常; 启用了“快速启动”功能导致的系统异常; 某些软件损坏或被删除导致的异常; 硬件驱动异常或过期导致的异常。 下面详细讲解Win10软件图标变白的解决办法。 方法一:禁用”快速启动“功能 1.右击开始菜单,选择“电源选项”;2.点…

    other 2023年6月27日
    00
  • Android Native 内存泄漏系统化解决方案

    Android Native 内存泄漏系统化解决方案 什么是内存泄漏 内存泄漏指的是在程序运行时,由于一些原因导致一部分内存空间无法被回收,进而导致内存使用率不断上升,应用性能下降,最终可能导致程序崩溃等问题。在 Android 应用开发中,由于内存资源的有限性,内存泄漏问题尤为严重。Android Native 内存泄漏的问题同样严峻,因为 Native …

    other 2023年6月26日
    00
  • WebSocket简介与消息推送

    WebSocket简介与消息推送攻略 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。通过WebSocket,浏览器和服务器之间可以进行实时通信,避免了HTTP协议的每次请求都需要重新建立连接的缺点。 WebSocket协议相对于传统的HTTP协议,具有以下优势: 高效:相比每次请求都要建立连接的HTTP协议,WebS…

    other 2023年6月27日
    00
  • js获取滚动条到顶部的距离

    js获取滚动条到顶部的距离 在Web开发中,经常需要获取用户滚动页面时的滚动距离,以此来实现各种页面特效。本文将介绍使用JavaScript获取滚动条滚动距离的几种方法。 方法一:window属性scrollTop var scrollTop = window.scrollTop || document.documentElement.scrollTop |…

    其他 2023年3月28日
    00
  • 存储过程里的递归 实现方法

    当需要处理大量数据、需要进行多层嵌套查询或连续的递归操作时,使用存储过程进行递归处理通常会比较高效。下面是实现存储过程中的递归的完整攻略: 1.创建表和存储过程 首先,我们需要在数据库中创建一个用于存储数据的表,例如一个员工表: CREATE TABLE employee ( id INT PRIMARY KEY AUTO_INCREMENT, name V…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部