美文网首页
TypeScript 类的定义与继承初探

TypeScript 类的定义与继承初探

作者: 酷酷的凯先生 | 来源:发表于2020-10-04 16:38 被阅读0次

    # 1. 定义一个类

    // 定义
    class Person{
      name:string; // 属性 前面省略的 public 关键词
      constructor(name:string){ //构造函数 实例化类的时候触发的方法
        this.name = name
      }
      getName():string{
        return this.name ;
      }
      setName(name:string):void{
        this.name = name;
      }
    }
    
    let p = new Person('张三'); // 实例化
    // 调用方法
    p.getName(); // 张三
    p.setName('李四'); //设置名称
    p.getName(); // 李四
    

    # 2. 类的继承

    class Person{
      name: string;
      constructor(name:string){
       this.name = name;
      }
      run():string{
        return this.name + '在运动';
      }
    }
    
    class Web extents Person{
      constructor(name:string){
        super(name);
      }
    }
    let w  = new Web('张三'); 
    console.log( w.run() ); // 张三在运动
    

    # 3. 类里的修饰符

    public :公有 在里面、子类和类外面都可以访问
    protected : 保护类型 在类里面和子类都可以访问,类外部不可访问
    private : 私有的 在类里可以访问,子类和类外面不可访问
    属性不加修饰符默认就是 公有(public)

    class Person{
      name: string; // 默认public
      protected age: number;
      private genter: string; 
      constructor(name:string, age:number, genter:string){
        this.name = name;
        this.age = age;
        this.genter = genter;
      }
      run():string{
        return this.name + '在运动';
      }
    }
    
    class Web extents Person{
      constructor(name:string, age:number, genter:string){
        super(name);
        super(age);
        super(genter);
      }
      run():string{
        return this.name + this.age + '岁了'; //没问题
        
        // 报错 提示 genter 为私有类型不可访问
        // return this.name + '是'+ this.genter +'生'; 
      }
    }
    let w  = new Web('张三', 18, '男'); 
    console.log( w.name ); // 张三    可访问 属性为 public
    console.log( w.age ); // 报错    不可访问 属性为 protected 
    

    # 4. 类里的静态方法

    class Person{
      name: string; // 默认public
      static age: number; // 静态属性
      constructor(name:string){
        this.name = name;           
      }
      // 动态方法
      run():string{
        return this.name + '在运动';
      }
      // work
      work():string{
        return this.name +'在工作'; // 报错 静态方法里只能访问静态属性
        return '我' + Person.age +'岁了';//正确 静态方法可以访问静态属性
      }
    }
    

    # 4. 抽象类和抽象方法

    1. 抽象类是提供其他类继承的基类,不能直接实例化;
    2. 用abstract关键字定义抽象类和抽象方法,
      抽象类中的方法不包含具体实现并且必须在派生类中实现;
    3. abstract 抽象方法只能放在抽象类里面;
    4. 抽象类和方法用来定义标准;
    abstract class Person{
      name: string; 
      constructor(name:string){
        this.name = name;           
      }
      // 抽象方法
      abstract work():any;
      // 动态方法
      run():string{
        return this.name + '在运动';
      }
    }
    
    // let p = new Person('张三'); // 报错 抽象方法不能实例化
    class Web extends Person{
      constructor(name:string){
        super(name)
      }
      // 如不实现抽象方法 work 则报错
      // 提示 抽象类的子类必须实现抽象类的抽象方法
      work():any{
        return this.name + '在工作';
      }
    }
    
    let w = new Web('张三');
    console.log( w.work() ); // 张三在工作
    console.log( w.run() ); // 张三在运动
    

    相关文章

      网友评论

          本文标题:TypeScript 类的定义与继承初探

          本文链接:https://www.haomeiwen.com/subject/jbaguktx.html