抽象类也成基类,类似于定义一个模板,抽象类的子类都必须按照抽象类的方式定义抽象类中的抽象方法和抽象属性。
读完上面一段话,感觉好像。。。没什么感觉。
抽象类是什么?
就是在类前面,加一个abstract修饰符。
// Person加了abstract 就是一个抽象类
abstract class Person {
name: string;
age: number;
sex: '男' | '女';
constructor(name: string, age: number, sex: '男' | '女') {
this.name = name;
this.age = age;
this.sex = sex;
}
}
抽象方法和抽象属性是什么 ?
就是在抽象类里面,某一个方法或者属性加上abstract修饰符
abstract class Person {
abstract name: string;
age: number;
sex: '男' | '女';
constructor(name: string, age: number, sex: '男' | '女') {
this.name = name;
this.age = age;
this.sex = sex;
}
getName: () => void = () => {
return this.name;
};
// getPerosonInfo方法加了abstract 就是一个抽象方法
abstract getPerosonInfo: () => void = () => {
return {
name: this.name,
};
};
}
抽象类里面可以没有抽象方法或抽象属性,但抽象方法或抽象属性必须放在抽象类中。
abstract class Tz {
getPerosonInfo: () => void = () => {
}
}
class Yx {
constructor() {
}
/** 抽象方法只能放到抽象类中, */
// abstract getName = () => {
//
// }
}
抽象类无法创建实例(无法进行new操作)
/** class 抽象 abstract */
abstract class Person {
name: string;
age: number;
sex: '男' | '女';
constructor(name: string, age: number, sex: '男' | '女') {
this.name = name;
this.age = age;
this.sex = sex;
}
getName: () => void = () => {
return this.name;
};
abstract getPerosonInfo: () => void = () => {
return {
name: this.name,
};
};
}
// 抽象类不能实例化
// var person1 = new Person('dx', 18, '男');
抽象类作为基类,子类必须存在抽象类的抽象方法或抽象属性(并且类型一致)
/** class 抽象 abstract */
// 抽象父类(基类)
abstract class Person {
name: string;
age: number;
sex: '男' | '女';
constructor(name: string, age: number, sex: '男' | '女') {
this.name = name;
this.age = age;
this.sex = sex;
}
getName: () => void = () => {
return this.name;
};
abstract getPerosonInfo: () => void = () => {
return {
name: this.name,
};
};
}
// 子类 继承抽象类
class Dx extends Person {
//父类的抽象方法必须存在子类中,并且类型一致
getPerosonInfo: () => void = () => {
return {
name: this.name,
};
};
}
// class Tz extends Person {
// 类型不一致是不允许的
// getPerosonInfo: (name: string) => void = () => {};
// }
抽象类的作用,作为类的模板,规范了其子类定义的标准,让代码更加规范。