Typescript的接口、抽象类

什么是接口?

接口可以理解为抽象到极致的抽象类,接口中只能存在抽象方法和属性

接口通过interface关键字来声明,通过implement来实现

类实现接口必须具有接口的属性和方法,方法一般情况为一个没有方法体的方法

 类接口:

// 类接口
interface StudentInterFace{
	name:string;
	say(msg:string):void  //未实现方法
}
class Student implements StudentInterFace{
	name:string;
	constructor(name){
		this.name=name
	}
	say(msg: string): void {
		console.log(this.name+'说'+msg);
	}
	foo(){

	}
}
let student:StudentInterFace=new Student('terry');//父类得引用指向子类实例
student.say('hello');

对象接口:

// 对象接口  创建出来的对象可以使用接口去实现
enum Gender{
	male='男',
	female='女'
}
class Student{
	name:string;
	age:number;
	gender:Gender;
	weight?:number
}
interface PropInterFace{
	data:Array,
	visible:boolean
}
//声明一个以PropInterFace为标准的prop对象
let prop:PropInterFace={
	data:[{
		name:'zhangsan',age:12,gender:Gender.male
	}],
	visible:false
};
console.log(prop);

什么是抽象类?

一般情况下,抽象类无法创建对象,抽象类中可以存在抽象方法(没有方法体的方法,只有抽象签名也就是函数名)

一个类中具有抽象方法,那该类一定是抽象类。

存在意义:为了让其他类继承抽象类,并强制要求子类实现抽象方法

子类继承抽象类的两种方法:

1)子类必须实现抽象类中的方法

abstract class Person1{
    abstract study():void;
}

 class Student3 extends Person1{
    study(): void {
        console.log('好好学习,考上了***大');
    };
    cook():void{
        console.log('在**科大,学会了做饭');
    }
}
let s2:Student3=new Student3();
s2.study();
s2.cook();

2)子类成为抽象类

abstract class Student1 extends Person{
     abstract study(): void;
 }

关于接口和抽象类的经典问题:

通过父类类型的引用可以调用子类特性吗? ------不可以

什么是抽象类?

1)无法实例化的类

2)抽象类存在抽象方法和非抽象方法

3)如果一个类中包含了抽象方法,该类一定是抽象类

4)如果一个类继承了抽象类,并且这个抽象类中有多个抽象方法

那么子类将会:

        1.实现所有抽象方法

        2.成为抽象类

什么是接口?

接口就是抽象到极致的抽象类

如果一个类实现了接口,那么这个类需要将接口中所有未实现的方法进行实现

如何实现一个接口

implements关键字

clss Student implements StudentInterface{}

 接口可以继承吗?

子接口可以将父接口中所有为实现的方法进行继承

你可能感兴趣的:(typescript,javascript,前端)