typescript 继承方法-使用 TypeScript 类

2023-08-26 0 4,181 百度已收录

1. 类的基本使用

类描述了所创建的对象共有的属性和技能

Typrscript 支持所有面向对象的功能,例如类、接口等。

Typrscript 类定义如下:

class class_name{
//类作用域
}

定义类的关键字是class,后面是类名。 一个类可以包含以下模块(类的数据成员):

数组 – 字段是在类上方声明的变量。 数组表示有关对象的数据。

构造函数——在类实例化时调用,它可以为类的对象分配视频内存。

方法——方法是对象执行的操作。

代码演示

export default {}
​
// 类的基本使用
class Person {// 字段(属性)name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}
​//函数(方法)sayHello(): void {console.log(`我是来自狗熊岭的${this.name},我今年${this.age}岁了!!!`);}
}
// 实例化类
let p0 = new Person("熊二", 18)
p0.sayHello()

typescript 继承方法-使用 TypeScript 类

2. 类继承

TypeScript支持继承类,即我们在创建类时可以继承现有的类。 这个现有的类称为父类,继承它的类称为泛型类型。

类继承使用关键字extends。 泛型不但不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。 TypeScript一次只能继承一个类,不支持多个类的继承,但是TypeScript支持多重继承(A继承B,B继承C)。

句子格式如下:

c1ass child_c1ass_name extends parent_class_name

代码演示

export default {}
​
// 类的继承
class Person {// 字段(属性)name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}
​//函数(方法)sayHello(): void {console.log(`我是来自狗熊岭的${this.name},我今年${this.age}岁了!!!`);}
}
// 实例化类
let p0 = new Person("熊二", 18)
p0.sayHello()
​
class Student extends Person {score: string;constructor(name: string, age: number, score: string) {// 调用父类中的构造函数super(name, age);this.score = score;}sayHello(): void {// 调用父类中的构造函数super.sayHello();// 重写的父类方法console.log(`我是重写的方法,我是来自狗熊岭的${this.name},我今年${this.age}岁了,我的成绩是${this.score}。`)}
}
let p1 = new Student("光头强",18,"C")
p1.sayHello();

3. static和instanceof

slatic关键字用于将类的数据成员(属性和技能)定义为静态的,静态成员可以通过类名直接调用。

instanceof运算符用于判断对象是否为指定类型,如果返回true,否则返回false。

typescript 继承方法-使用 TypeScript 类

代码演示:

export default {}
​
​
// slatic关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。
class StaticTest {static salary: number;static say(): void {console.log(`我们想要的工资是${StaticTest.salary}k`);}
}
StaticTest.salary = 100;
StaticTest.say();
​
​
// instanceof运算符用于判断对象是否是指定的类型,如果是返回true,否则返回false。
class Person {};
​
let p0 = new Person();
let isPerson = p0 instanceof Person;
console.log("p0对象是Person实例化出来的吗?",isPerson);//true
​
class Student extends Person{};
​
let p1 = new Student();
let isStudent = p1 instanceof Student;
console.log("p1对象是Person实例化出来的吗?",isStudent);//true

4. 类中的修饰符

public(默认):公开,可以在任何地方访问,

protected:受保护,可以被自身及其基类访问,

private:私有,只能被定义它的类访问。

readonly:可以使用 readonly 关键字将属性设置为只读。 只读属性必须在声明时或构造函数中初始化。

代码演示:

export default {}
​
class Person {public name: string;//公有属性protected age: number;//受保护private sex: string;//私有属性
​say(): void {console.log(`我的名字是${this.name},性别${this.sex},今年${this.age}岁了}`);}
}
​
class Student extends Person {score: string;constructor(name: string, age: number, sex: string, score: string) {super();this.name = name;this.score = this.score;}say(): void {console.log(this.name);console.log(this.age);// console.log(this.sex);//属性"sex”为私有属性,只能在类"Person”中访问。console.log(this.score);
​}
}
​
//readonly:可以使用readonly关键字将属性设置为只读的。只读属性必须在声明时或构造函数里被初始化。
​
class Print {readonly str1: string = "我是声名时赋值的";readonly str2: string;readonly str3: string;readonly str4: string;readonly str5: string;
​constructor( str2: string, str3: string, str4: string, str5: string) {this.str2 = str2;this.str3 = str3;this.str4 = str4;this.str5 = str5;}say() {console.log(this.str1,this.str2, this.str3, this.str4, this.str5);}
}
let p0 = new Print( '喜洋洋', '懒洋洋', '沸羊羊', '美洋洋');
p0.say();
​

5. getter 和 setter

另一个正式名称:访问器通过 getter/setter 拦截对对象成员的访问

注意:如果有gettypescript 继承方法,但没有set,则该属性手动只读

如果没有指定setter参数的类型,则会根据getter的返回类型推断

访问器和设置器必须具有相同的成员可见性

代码演示:

export default {}
​
class MyName {private _fullname: string = "熊大";
​//读取字段的值get fullname() {console.log("get被调用了");return this._fullname;}// 设置读取字段的值set fullname(newName: string) {console.log("set被调用了");this._fullname = newName;}
}
​
let p0 = new MyName();
p0.fullname="熊二";
console.log(p0);
console.log(p0.fullname);

6.抽象

定义:

表述类用作其他派生类的子类。它们通常不直接实例化

具体类专门用来定义不想被外界直接创建的类

typescript 继承方法-使用 TypeScript 类

表征类和套接字也用于约束泛型

代表类和socket区别

具体方法必须包含abstract关键字并且可以包含访问修饰符

套接字只能定义约束typescript 继承方法,不能定义具体实现。在具体类中,既可以定义约束,也可以定义具体实现

代码演示:

export default {}
​
abstract class Person {abstract name: string;abstract age: number;abstract show(): string;
​showName(): void {console.log("你好");
​}
}
​
class Student extends Person {name: string = "光头强"age: number = 30show() {return '熊出没'}
}
​
let p0 = new Student();
console.log(p0);//Student { name: '光头强', age: 30 }
let res =p0.show();
console.log(res);//熊出没

7. 实现谓词

类可以使用关键字implements来实现套接字

Implements 谓词可用于测试类是否满足特定套接字。如果类未能正确实现它,也会发出错误

当心:

typescript 继承方法-使用 TypeScript 类

使用可选属性实现套接字不会创建该属性

套接字只要继承了某个类,就会继承该类中的所有属性和方法,并且只继承属性和技能的声明,不会继承属性——属性和技能的实现与extends的区别

extends:继承一个类,继承后可以使用父类的方法,也可以重绘父类的方法implements:继承一个类,必须重绘才可以使用

代码演示:

export default {}
​
interface IPersonInfo {name: string;age: number;sex?: string;show(): void;
}
​
interface IMusic {music: string;
}
​
class Person implements IPersonInfo, IMusic {name: string = "熊大";age: number = 18;sex: string = "公";music: string = "会唱歌"show(): void {console.log(`我叫${this.name},今年${this.age},我是${this.sex}的`)}
}
let p0 = new Person();
p0.sex = ""
p0.show();
​
​
// 注意点:只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法
//但是只会继承属性和方法的声明,不会继承属性和方法实现
​
interface ITest extends Person {salary: number;
}
​
class Star extends Person implements ITest {name: string = "熊二";age: number = 20;salary: number = 30000;
}
let p1 = new Star();
console.log(p1.name);
console.log(p1.salary);

8.类初始化顺序

通用数组已初始化

通用构造函数运行

通用数组已初始化

类构造函数运行worker

代码演示

export default {}
​
class Old {name: string = "熊大";constructor() {console.log(`我是${this.name},我主演了《熊出没》`);}
}
​
class Young extends Old{name: string = "喜洋洋";constructor() {super();console.log(`我是${this.name},我主演了《喜羊羊与灰太狼》`);}
}
let p0 = new Young();

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 typescript typescript 继承方法-使用 TypeScript 类 https://www.wkzy.net/game/154094.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务