面向对象
面向对象是程序中一个重要的思想。所谓对象,就是计算机程序对现实世界的事物的抽象,即现实中的事物在程序中表现为对象。而程序中的对象都被分为数据和功能两大部分,以人为例,人有姓名,年龄,性别等数据,在程序中称为对象的属性。同时,人有吃饭,走路,睡觉等功能,在程序中称为对象的方法。而面向对象就是指程序的一切操作都是通过对象来完成的。
类
面向对象编程首先要创建对象。要创建对象就得先创建类。类可以理解为对象的模型,程序中根据类可以创建指定类型的对象。如通过Person类可以创建人的对象,通过Car类可以创建车对象。
- 定义类
class 类名 {
属性名:类型;
constructor(参数:类型) {
this.属性名 = 参数
}
方法名(){
……
}
}
- 实例展示
//定义一个人的类
class Person {
name:string;
age:number;
//静态属性(类属性),通过类名调用
static sex = "男"
constructor(name:string,age:number) {
this.name = name
this.age = age
}
sayHi(){
console.log(this.name+"跟你打了声招呼!!")
}
}
- 继承
类的继承是指在现有类的基础上去构建一个新的类,新的类配称为子类,现有类称为子类的父类或基类。子类可以继承父类的属性和方法。以上面Person类为例,我们可以在他的基础上创建Chinese类和American类分别表示中国人和美国人。
- 语法
class 子类 extends 父类{
子类特有属性:类型;
//子类构造函数
constructor(参数1:类型,参数2:类型,参数3:类型){
//super可以用来调用父类的属性,方法和构造函数
super(参数1,参数2); //调用父类构造函数
this.属性名 = 参数3
}
方法名(){
……
}
父类方法名(){
……
}
}
- 实例展示
class Chinese extends Person{
country:string;
constructor(name:string,age:number,country:string){
super(name,age);
this.country = country
}
//重写Person类sayHi()方法
sayHi(){
console.log(`${this.name}说了声你好`)
}
//新增speakChinese()方法
speakChinese(){
console.log(`${this.name}会说中文`)
}
}
多态
在上面的实例中,我们看到了子类对父类的sayHi()方法的实现过程进行了重新编写,这种情况被我们称为重写。
- 重写
重写也叫覆盖。指子类对父类已有的非静态,非private,非final方法的实现过程进行重新编写。返回值和形参不能改变,与父类保持一致。即外壳不变,核心重写。同时,重写是实现多态的先决条件,没有重写就没有多态。
- 多态
多态主要是指子类对同一方法产生不同的行为。因此,多态是建立在继承的基础上产生的,先有继承才有多态。同时,我通过在父类创建方法,然后在不同子类中进行各自的重写,以此来达到多态。
属性的封装
- 修饰符
TS可以在属性之前添加属性修饰符,具体的属性修饰符有如下几种:
public:公共属性。被public修饰的属性可以在任意位置访问或修改默认值;
protected:受保护属性。被protected修饰的属性只能在当前类和当前类的子类中访问;
private:私有属性。被private修饰的属性只能在当前类访问,其他位置都无法访问;
- 语法
在TS中我们通过private对属性进行封装,通过设置get()和set()方法访问和修改属性。具体语法如下:
class 类名 {
private _属性名:类型;
constructor(参数:类型) {
this._属性名 = 参数
}
get 属性名(){
return this._属性名
}
set 属性名(参数:类型){
this._属性名 = 参数
}
}
let 实例 = new 类名(实参);
// 外部环境获取属性
console.log(实例.属性名);
// 外部环境修改属性
实例.属性名 = 值;
- 实例展示
class Person {
private _name:string;
private _age:number;
constructor(name:string,age:number) {
this._name = name
this._age = age
}
get name(){
return this._name
}
set name(value:string){
this._name = value
}
get age(){
return this._age;
}
set age(value:number){
this._age = value
}
}
let p = new Person("吴名小卒",18);
console.log(p.name,p.age)
p.age = 20
console.log(p.age)
- 输出结果
总结
本篇文章主要以Typescript语法为核心,围绕面向对象编程理论对TS的重要知识进行讲述。主要简述了如何通过TS语法进行类的创建,类的继承,多态的实现,属性的封装。