// 类 class Person { name: string constructor(name: string) { this.name = name } run(): void { console.log(this.name) } getName(): string { console.log(this.name) return this.name } setName(name: string): void { this.name = name } } let p = new Person('张三1') p.run() p.setName('李四') p.getName() // 继承 class Person1 { public name: string protected age: number = 18 private sex: string = 'boy' constructor(name: string) { this.name = name } run(): void { console.log(this.name + '父类') console.log(this.age + '父类') console.log(this.sex + '父类') } } let p1 = new Person1('王五') console.log(p1.name) // console.log(p1.age) 报错 保护类型 // console.log(p1.sex) 报错 私有类型 p1.run() class Web extends Person1 { constructor(name: string) { super(name) } // 拓展方法 work() { console.log(this.name + 'work....') console.log(this.age + 'work....') // console.log(this.sex + 'work....') 报错 私有类型 } // 覆盖父类同名方法 run(): void { console.log(this.name + '子类') } } let w = new Web('x6') w.run() w.work() // 修饰符 // public 公有类型,子类,类外都可访问 // protected 保护类型,子类可以访问,类外无法访问 // private 私有类型,子类,类外都无法访问 // 静态方法 class Person2 { public name: string static age = 18 constructor(name: string) { this.name = name } // 实例方法 run(): void { console.log(this.name + 'run') } work(): void { console.log(this.name + 'work') } // 静态方法 // 无法直接调用类里面的属性 // 除非是静态属性 static print() { console.log('print' + this.age) } } let p2 = new Person2('张三') p2.run() Person2.print() // 多态(属于继承) // 父类定义一个方法不去实现,让继承的子类去实现,每个子类有不同的表现 class Animal { name: string constructor(name: string) { this.name = name } eat() { console.log('eateateat') } } class Dog extends Animal { constructor(name: string) { super(name) } eat() { console.log(this.name + 'eateateat1') } } class Cat extends Animal { constructor(name: string) { super(name) } eat() { console.log(this.name + 'eateateat2') } } let dog = new Dog('DogDog') dog.eat() let cat = new Cat('CatCatCat') cat.eat() // 抽象类,是提供其他类的基类,不能直接实例化 abstract class Animal1 { public name: string constructor(name: string) { this.name = name } abstract eat(): any } // var a =new Animal1() 错误的写法 class Dog1 extends Animal1 { // 抽象类的子类必须实现抽象类里的抽象方法 constructor(name: string) { super(name) } eat() { console.log(this.name + 'eateateat3') } } let dog1 = new Dog1('Dog1Dog1') dog1.eat() let aaa = { a: 1, b: 2, c: 3 } let bbb = Object.assign({}, aaa, { a: 2 }) let ccc = { ...aaa, a: 3 } console.log(aaa) console.log(bbb) console.log(ccc)