概念
直接看代码去理解,它是个类,即模版。
实例化一个类,我们就可以去指挥这个类的方法。
class People {public name: string;public age: number;constructor(name: string, age: number) {this.name = namethis.age = age}eat() {alert(`${this.name} eat something`)}speak() {alert(`My name is ${this.name},age ${this.age}`)}}let kipsong = new People('kipsong', 23)kipsong.eat()kipsong.speak()
三要素
继承:子类继承父类
比如创建一个子类Student类,来继承父类People类
那么子类Student可拥有父类People的的属性和方法。
class Student extends People {public number: string;constructor(name: string, age: number, number: string) {super(name, age)this.number = number}study() {alert(`${this.name} study`)}}let kipsong = new Student('kipsong', 23, "001")kipsong.study() // 子类定义的kipsong.eat() // 父类定义的kipsong.speak() // 父类定义的
总结:继承可将公共方法抽离出来,提高复用,减少冗余
封装:数据的权限可保密
关键字:
public 公开
protected 只可在父类和子类的类中访问,实例对象不可访问
private 只有在父类的类中访问
默认 公开(和java不一样)
protected只能在类中可访问,实例对象不可访问
class People {protected name: string;public age: number;constructor(name: string, age: number) {this.name = namethis.age = age}eat() {alert(`${this.name} eat something`)}speak() {alert(`My name is ${this.name},age ${this.age}`)}}let kip = new People("kip",23)kip.name // 报错class Student extends People {public number: string;constructor(name: string, age: number, number: string) {super(name, age)this.number = number}study() {alert(`${this.name} study`)}}let kipsong = new Student('kipsong', 23, "001")kipsong.name // 报错
private 只有在父类的类中访问
class People {public name: string;private age: number;constructor(name: string, age: number) {this.name = namethis.age = age}eat() {alert(`${this.name} eat something`)}speak() {alert(`My name is ${this.name},age ${this.age}`)}}var kip = new People('kip',23)kip.age // 报错Property 'age' is private and only accessible within class 'People'.
总结:减少耦合,不该外露的不外露 利于数据、接口的权限管理
**
多态:同一个接口不同实现
重写:子类可重写父类的方法
class People {public name: string;constructor(name: string) {this.name = name}doSomething() {alert('People do something')}}class A extends People {constructor(name: string) {super(name)}doSomething() {alert('A do something')}}let a = new A('kip')a.doSomething() // A do something
注意:这里没有Java中的重载概念,如果子类中含有父类的方法,可以都理解为重写父类方法。
