什么是接口?
接口可以理解为抽象到极致的抽象类,接口中只能存在抽象方法和属性
接口通过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<Student>,
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{}
接口可以继承吗?
子接口可以将父接口中所有为实现的方法进行继承