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日

相关文章

  • Java中Connection timed out和Connection refused的区别讲解

    Java中Connection timed out和Connection refused的区别讲解 1. 概述 在Java中,网络编程是一种常见的操作方式。当我们使用Java程序进行网络请求时,常常会碰到Connection timed out或Connection refused的报错。这两个报错有着一些共同点,但是它们的具体含义又有所不同。在本文中,我们…

    other 2023年6月27日
    00
  • 尝试写一写4gl与4fd

    4GL与4FD的完整攻略 4GL和4FD是两种常见的编程语言,用于开发企业级应用程序。本文将为您提供一份详细的4GL与4FD的完整攻略,包括4GL和4FD的基本概念、4GL和4FD的区别、4GL和4FD的示例和使用4GL和4FD的注意事项。 4GL和4FD的基本概念 4GL和4FD是两种常见的编程语言,用于开发企业级应用程序。4GL是第四代编程语言,主要用于…

    other 2023年5月5日
    00
  • C语言结构体使用之链表

    C语言结构体使用之链表 1. 链表的定义 链表是一种动态数据结构,它由若干个节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。 链表可以分为单链表、双向链表和循环链表几种形式,这里我主要介绍单链表的使用。 2. 链表的声明 链表的声明需要定义链表节点的数据类型,链表的头指针以及一些和链表相关的操作函数。具体代码如下: //定义链表节点的数据类型 …

    other 2023年6月27日
    00
  • PHP预定义变量9大超全局数组用法详解

    PHP预定义变量9大超全局数组用法详解 PHP提供了9个超全局数组,它们在任何作用域中都可访问,无需使用global关键字。下面将详细介绍这9个超全局数组的用法。 1. $GLOBALS $GLOBALS是一个包含了全局变量的全局关联数组。它可以在函数内部访问全局变量,也可以在函数外部访问局部变量。示例代码如下: $global_var = 10; func…

    other 2023年8月9日
    00
  • vue创建组件的两种方法小结(必看)

    Vue.js是一种流行的JavaScript框架,用于构建交互式Web应用程序。在Vue.js中,组件是构建应用程序的基本构建块之一。本文将介绍Vue中创建组件的两种方法。 方法1:使用Vue.component()方法创建全局组件 Vue.component()方法是Vue.js中创建全局组件的一种方法。以下是使用Vue.component()方法创建组件…

    other 2023年5月9日
    00
  • 天命奇御找圣女卡图闪退怎么办 摩尼教找圣女卡图闪退BUG解决方法

    天命奇御找圣女卡图闪退的解决方法 如果你在玩天命奇御的时候,遇到了找圣女卡图闪退的问题,那么可以按照以下步骤进行解决。 解决方法 首先尝试重新启动游戏,看看是否还会出现闪退现象。 如果重新启动游戏依然出现问题,可以尝试清除游戏缓存来解决问题。具体操作步骤如下: 打开手机的应用管理器; 找到天命奇御游戏; 点击“存储”选项; 点击“清除缓存”按钮。 如果清除缓…

    other 2023年6月27日
    00
  • Android实现滑块拼图验证码功能

    Android实现滑块拼图验证码功能攻略 简介 滑块拼图验证码是一种常见的人机验证方式,用于判断用户是否为真实用户而不是机器人。在Android应用中实现滑块拼图验证码功能可以提高应用的安全性。本攻略将详细介绍如何在Android应用中实现滑块拼图验证码功能。 步骤 步骤一:准备资源 首先,需要准备一张包含滑块和背景的图片作为验证码的背景图。 然后,需要准备…

    other 2023年8月20日
    00
  • 探讨:将两个链表非降序合并为一个链表并依然有序的实现方法

    将两个非降序链表合并为一个链表并保持非降序的方法,可以采用以下步骤: 定义一个新链表,当前指针初始化为 NULL。 比较两个链表的头节点,将较小值的节点添加到新链表中,同时将这个链表的指针移动到下一个节点,然后比较两个链表当前节点的值,重复以上步骤,直到遍历完其中一个链表。 将另一个链表中剩余的节点加入新链表的尾部。 具体实现可以参考代码如下: struct…

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