类的基本用法
定义
TypeScript 是面向对象的 JavaScript。 类描述了所创建对象的共同属性和技能。 TypeScript 支持所有面向对象的功能,例如类、接口等。
课程内容如下:
class Person {
// 需要先定义实例属性,才能够使用
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
say(): void {
console.log("hello world");
}
}
let person = new Person("张三", 1);
person.say();
类继承
TypeScript支持继承类typescript类的方法,即我们在创建类时可以继承现有的类。 这个现有的类称为父类,继承它的类称为泛型。
类继承使用关键字extends。 泛型不但不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。
TypeScript 一次只能继承一个类,不支持多个类的继承。 但是,TypeScript 支持多重继承(A 继承 B,B 继承 C)。
句子格式如下:classchild_class_nameextendsparent_class_name
class Person {
// 需要先定义实例属性,才能够使用
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
say(): void {
console.log("hello world");
}
}
class Student extends Person {
ID: number;
constructor(name: string, age: number, ID: number) {
super(name, age);
this.ID = ID;
}
say(): void {
super.say();
console.log("重写后的方法");
}
}
let stu = new Student("张三", 1, 111);
stu.say();
静止的
static关键字用于将类的数据成员(属性和技术)定义为静态,静态成员可以通过类名直接调用。
class Person {
static phone: number = 111111;
static play(): void {
console.log(`phone: ${Person.phone}`);
}
}
Person.play();
类中的修饰符
class Person {
public name: string;
protected age: number;
private sex: string;
constructor(name: string, age: number, sex: string) {
this.name = name;
this.age = age;
this.sex = sex;
}
say(): void {
console.log("hello world");
}
}
getter 和 setter
另一个正式名称:accessor
通过 getter/setter 拦截对对象成员的访问
如果有 get 但没有 set,则该属性是手动只读的。
如果没有指定setter参数的类型typescript类的方法,则会从getter的返回类型推断。
访问器和设置器必须具有相同的成员可见性
class Person {
private _name: string = "哈哈";
get name(): string {
console.log("get方法");
return this._name;
}
set name(name: string) {
console.log("set方法");
this._name = name;
}
}
let person = new Person();
person.name = "张三";
console.log(person);
console.log(person.name);
代表性的
abstract class Person {
abstract name: string;
abstract show(): string;
showName() {
console.log(this.show());
}
}
class Student extends Person {
name: string = "张三";
show(): string {
return "李四";
}
}
let s = new Student();
console.log(s.show());
实施
使用可选属性实现套接字不会创建该属性
一个socket只要继承了某个类,就会继承该类中的所有属性和方法,并且只会继承属性和技术的声明,而不会继承属性和技术的实现。
与extends的区别
extends:继承某个类。 继承后可以使用父类的方法,也可以重绘父类的方法。
Implements:实现某个socket,必须重绘后才能使用
interface IInfo {
location: string;
}
interface ISchool {
schoolName: String;
}
class Student implements IInfo, ISchool {
schoolName: String = "中山大学";
location: string = "广州";
}