一、面向对象

  1. 封装、继承、多态

1-1 封装函数

  1. api 应用程序接口 封装复杂,接口简单
  1. class Person{
  2. name:string;
  3. age;number;
  4. constructor(name:string,age:number){
  5. this.name = name;
  6. this.age = age
  7. }
  8. sayName(){
  9. console.log(this.name);
  10. }
  11. }

1-2 extends 继承

  1. /* 1、定义一个Person类,包含name,age两个属性 */
  2. class Person{
  3. name:string;
  4. age;number;
  5. constructor(name:string,age:number){
  6. this.name = name;
  7. this.age = age
  8. }
  9. sayName(){
  10. console.log(this.name);
  11. }
  12. }
  13. /* 2、student skill,saySkill */
  14. /* class Student{
  15. name:string;
  16. age;number;
  17. skill:string;
  18. constructor(name:string,age:number,skill:string){
  19. this.name = name;
  20. this.age = age
  21. this.skill = skill;
  22. }
  23. saySkill():void{
  24. console.log(this.skill);
  25. }
  26. } */
  27. class Student extends Person{
  28. skill:string;
  29. constructor(name:string,age:number,skill:string){
  30. /* super指的是父类,只能放在子类构造方法中的第一行 */
  31. super(name,age);
  32. this.skill = skill;
  33. }
  34. saySkill():void{
  35. console.log(this.skill);
  36. }
  37. }
  38. var res:Student = new Student("lisi",18,"vue");
  39. console.log(res);
  40. res.sayName();

1-3 多态

  1. 根据传入的对象,动态决定调用谁的方法
  1. interface Animal{
  2. eat():void;
  3. }
  4. class Cat implements Animal{
  5. eat():void{
  6. console.log("鱼");
  7. }
  8. }
  9. class Dog implements Animal{
  10. eat():void{
  11. console.log("骨头");
  12. }
  13. }
  14. class Farmer{
  15. feed(obj:Animal){
  16. obj.eat()
  17. }
  18. }
  19. var f:Farmer = new Farmer();
  20. f.feed(new Cat())
  21. f.feed(new Dog())

二、接口到底是什么

2-1 抽象类

  1. /* 抽象类 */
  2. /* 1、使用class关键字定义的叫实体类 */
  3. /* class Animal{
  4. eat():void{
  5. console.log("any");
  6. }
  7. } */
  8. /* 2、抽象类 本质上就是一个接口 */
  9. abstract class Animal{
  10. abstract eat():void
  11. }
  12. /* 使用实体类对抽象类实现继承的时候,必须重写抽象类中的抽象方法 */
  13. class Cat extends Animal{
  14. eat():void{
  15. console.log("鱼");
  16. }
  17. }
  1. interface Animal{
  2. eat():void;
  3. }
  4. class Cat implements Animal{
  5. eat():void{
  6. console.log("鱼");
  7. }
  8. }

三、修饰符public,private,protected

访问权限 外部 子类
public
private × ×
protected ×
  1. //protected
  2. class Student{
  3. protected name:string = "lisi";
  4. sayName(){
  5. console.log(this.name);
  6. }
  7. }
  8. var s:Student = new Student();
  9. console.log(s.name);
  1. class Student{
  2. protected name:string = "lisi";
  3. sayName(){
  4. console.log(this.name);
  5. }
  6. }
  7. /* protected和private的区别:在子类中
  8. protected可以访问
  9. private不可以访问
  10. */
  11. class MidStundet extends Student{
  12. getName(){
  13. console.log(this.name);
  14. }
  15. }
  16. var m:MidStundet = new MidStundet();
  17. m.getName()