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

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日

相关文章

  • AngularJS封装指令方法详解

    让我详细讲解一下”AngularJS封装指令方法详解”的完整攻略。 什么是AngularJS指令? AngularJS指令是一个带有特定功能的HTML标签,它可以包含一个模板,并能与指定的作用域(scope)进行交互。指令的具体功能是由编写指令的人员来指定的。 封装AngularJS指令 封装AngularJS指令的方法: 使用directive函数封装指令…

    other 2023年6月25日
    00
  • html
    标签

    <figure>标签是HTML5中的一个新标签,用于表示一组相关的媒体内容,通常包括图片、图表、音频、视频等。下面是<figure>标签的详细攻略。 定义<figure>标签 以下是<figure>标签的基本语法: <figure> <!– 媒体内容 –> </figure&g…

    other 2023年5月8日
    00
  • Intellij idea 代码提示忽略字母大小写和常用快捷键及设置步骤

    Intellij IDEA 代码提示忽略字母大小写和常用快捷键及设置步骤攻略 代码提示忽略字母大小写 在Intellij IDEA中,你可以设置代码提示忽略字母大小写,以便更方便地进行代码补全。以下是设置步骤: 打开Intellij IDEA并进入设置界面。你可以通过点击菜单栏中的 \”File\” -> \”Settings\” 或使用快捷键 \”C…

    other 2023年8月18日
    00
  • Win11开机后出现explorer.exe应用程序错误怎么解决? exe应用程序错误解决办法

    Win11开机后出现explorer.exe应用程序错误怎么解决? 当我们在Windows 11操作系统上开机时,可能会遇到explorer.exe应用程序错误的问题。在本文中,我们将提供解决这个问题的解决方案,让您能够顺利地启动Windows 11操作系统。 进行系统文件检查 首先,我们可以尝试使用操作系统自带的sfc /scannow命令来检查系统文件是…

    other 2023年6月20日
    00
  • jQuery Dialog 弹出层对话框插件

    jQuery Dialog 弹出层对话框插件的完整攻略 1. 简介 jQuery Dialog 是一个弹出层对话框插件,用于在网页上创建可自定义样式的模态对话框。它可以用于提示信息、确认操作、表单提交等场景。 2. 使用步骤 2.1 引入 jQuery 和 jQuery Dialog 插件文件 首先,在你的网页中引入 jQuery 和 jQuery Dial…

    other 2023年6月28日
    00
  • vsftpd 配置(中)

    下面是关于 “vsftpd 配置(中)” 的详细攻略。 安装 vsftpd 首先要在 Linux 系统上安装 vsftpd,可以使用以下命令进行安装(以 CentOS 为例): yum install vsftpd 配置 vsftpd 接下来需要对 vsftpd 进行配置,配置文件路径为 /etc/vsftpd/vsftpd.conf。 1. 允许匿名访问 …

    other 2023年6月27日
    00
  • raid对硬盘的要求及其相关

    RAID对硬盘的要求及其相关 RAID技术简介 RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,是一种将多个硬盘组合起来进行数据存储的技术。RAID技术主要被应用于服务器等对数据可靠性要求较高的场合,以提高系统性能及故障恢复能力。 RAID对硬盘的要求 相同规格和型号 RAID采用多个硬盘组合而成,同一…

    其他 2023年3月28日
    00
  • Vue3中动态修改样式与级联样式优先顺序图文详解

    Vue3中动态修改样式与级联样式优先顺序图文详解 1. 简介 在Vue3中,动态修改样式可以通过绑定数据到元素的class或style属性实现。而级联样式优先顺序是指当一个元素同时匹配多个CSS选择器的样式规则时,浏览器会根据优先级来决定应用哪个样式规则。在本攻略中,我们将详细讲解如何在Vue3中实现动态样式的修改,并解释级联样式优先顺序的规则。 2. Vu…

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