📅  最后修改于: 2023-12-03 14:46:02.827000             🧑  作者: Mango
在Python PPT中,展示了类和对象的概念以及如何在Python中使用它们来构建程序。现在,我们将把这些概念转换成TypeScript,并介绍如何在TypeScript中使用它们。
在TypeScript中,类是一个定义了一组属性和方法的蓝图。类定义了对象的形式,因此我们可以基于这个蓝图创建对象。TypeScript的类是基于面向对象编程的原则定义的。
下面是一个使用TypeScript定义的简单类的例子:
class Person {
firstName: string;
lastName: string;
constructor(firstName: string, lastName: string) {
this.firstName = firstName;
this.lastName = lastName;
}
sayHello() {
console.log(`Hello, ${this.firstName} ${this.lastName}`);
}
}
let person = new Person("John", "Doe");
person.sayHello(); // 输出 "Hello, John Doe"
上面的代码定义了一个Person类,有一个constructor方法和一个sayHello方法。constructor方法是类的构造函数,用于初始化对象的属性。sayHello方法用于输出 persons 的姓名。
对象是类的实例。我们可以把它们看作是具有类中定义的属性和方法的变量。
下面是一个使用TypeScript创建的对象的例子:
let person = new Person("John", "Doe");
person.sayHello(); // 输出 "Hello, John Doe"
上面的代码实例化了Person类,并且通过调用sayHello方法输出了 "Hello, John Doe"。
类的继承是一种使用一个已经存在的类作为基础创建新类的机制。在TypeScript中,我们可以使用extends和super关键字来实现类的继承。下面是一个使用TypeScript实现类的继承的例子:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) {
super(name);
}
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
class Horse extends Animal {
constructor(name: string) {
super(name);
}
move(distanceInMeters = 45) {
console.log("Galloping...");
super.move(distanceInMeters);
}
}
let sam = new Snake("Sammy the Python");
let tom: Animal = new Horse("Tommy the Palomino");
sam.move(); // 输出 "Slithering... Sammy the Python moved 5m."
tom.move(34); // 输出 "Galloping... Tommy the Palomino moved 34m."
上面的代码定义了Animal和Snake和Horse类。在这个例子中,Snake和Horse继承了Animal类。Snake和Horse类覆盖了原来的move方法并增加了一些新的行为。我们也可以看到,在Snake类的构造函数中,我们调用了super()方法,它会调用Animal类的构造函数。这样,子类就可以访问父类中定义的属性。
在TypeScript中,我们可以使用访问修饰符来限制对类的属性和方法的访问。这些访问修饰符包括public、private和protected。
下面是一个通过私有属性实现类的访问控制的例子:
class Animal {
private name: string;
constructor(name: string) {
this.name = name;
}
public move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Horse extends Animal {
constructor(name: string) {
super(name);
}
public move(distanceInMeters = 45) {
console.log("Galloping...");
super.move(distanceInMeters);
}
}
const animal = new Animal("Horse");
animal.move(); // 编译错误: 属性 'name' 是私有的,只能在类内部访问。
let tom: Animal = new Horse("Tommy the Palomino");
tom.move(34); // 输出 "Galloping... Tommy the Palomino moved 34m."
上面的代码定义了Animal和Horse类。在Animal类中,我们将name属性设置为私有属性。这样,我们在类外部是无法直接访问它的。在下面的代码中,我们使用let tom:Animal = new Horse("Tommy the Palomino")来创建Horse类的实例,但是它的类型是Animal,因此我们只能通过公共的move方法访问它。
在TypeScript中,我们可以使用类和对象来构建程序。类是一个定义了一组属性和方法的蓝图。对象是类的实例。我们也可以使用继承和访问修饰符来实现类的继承和访问控制。TypeScript的类和对象是基于面向对象编程原则定义的。