本文最后更新于:2020-05-03 17:18:07
1.class的创建
class Person {
name: string;
age: number;
constructor(name: string, age: number) { //构造方法 实例化类的时候触发的方法
this.name = name;
this.age = age;
}
run(): void {
console.log(this.name + '在跑步');
}
getName(): string {
return this.name;
}
setName(name: string): void {
this.name = name;
}
}
let p = new Person('张三', 30);
console.log(p.name); //张三
p.run();// 张三在跑步
console.log(p.getName());//张三
p.setName('李四');
console.log(p.getName());//李四
2.TS 类的继承 extends + super
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
run(): void {
console.log(this.name + '在跑步');
}
getName(): string {
return this.name;
}
setName(name: string): void {
this.name = name;
}
}
//子类
class Student extends Person {
sex: string;
constructor(name: string, age: number, sex: string) {
super(name, age); //初始化父类的构造函数
this.sex = sex;
}
run(): void {
console.log(this.name + '在跑步');
}
work(): void {
console.log(this.name + '在工作');
}
print(): string {
return this.name + '-' + this.age + '-' + this.sex;
}
}
let s = new Student('李白', 400, '男');
console.log(s.sex); //男
s.run(); //李白在跑步
console.log(s.print()); //李白-400-男
3.类的修饰符 public(默认) private protected
是否可以访问 | 描述 | 父类 | 子类 | 类外部 |
---|---|---|---|---|
public | 公有 | ok | ok | ok |
private | 私有 | ok | no | no |
protected | 保护类型 | ok | ok | no |
4.类的静态属性和静态方法
class Person {
name: string;
age: number;
static sex:string = '男';
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
run(): void {
console.log(this.name + '在跑步');
}
static print():void{ //静态方法中无法访问this(即不能访问实例属性和实例方法)
console.log(Person.sex);
}
}
let p = new Person('zs',56);
console.log(Person.sex); // 男
Person.print(); // 男
5.多态
父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现
多态属于继承
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat(): void {
console.log(this.name);
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
eat():void{
console.log(`${this.name} 要吃肉`);
}
}
class Fish extends Animal {
constructor(name:string){
super(name);
}
eat():void {
console.log(`${this.name} 要吃微生物`);
}
}
6.抽象类
- 是提供其他类继承的基类,不能直接被实例化。
- 用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现,并且必须在派生类中实现。
- 抽象方法只能放在抽象类中
- 抽象类和抽象方法用来定义标准
abstract class Animal {
name:string;
constructor(name:string){
this.name = name;
}
abstract eat(): any; //抽象类中的抽象方法不包含具体实现
}
/* let a = new Animal(); //错误 不能直接被实例化 */
class Dog extends Animal {
constructor(name:string){
super(name);
}
// 抽象类的子类必须实现抽象类的抽象方法
eat(): string {
return this.name + '喜欢吃肉';
}
}
let d = new Dog('小狗');
console.log(d.eat()); //小狗喜欢吃肉
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!