zoukankan      html  css  js  c++  java
  • TS之类的继承

    1.定义类

    // ts中定义类和方法
    class Person {
      name: string;      
      constructor(n: string) {   //构造函数,实例化类的时候触发的方法
        this.name = n;
      }
    
      run(): void {
        console.log(this.name);
      }
    }
    class Person1 {
      name: string;      
      constructor(name: string) {   //构造函数,实例化类的时候触发的方法
        this.name = name;
      }
    
    
      getName(): string {
        return this.name;
      }
      setName(name: string): void {
        this.name = name
      }
    }
    
    let p1 = new Person1('李四');
    console.log(p1.getName());
    p1.setName('王五');
    console.log(p1.getName());

    2.TS中实现继承(extends、super)

    // 父类
    class Person {
      name: string;
      constructor(name: string) {
        this.name = name;
      }
    
      run(): string {
        return `${this.name}在奔跑`;
      }
    }
    
    let p = new Person('张三');
    console.log(p.run());
    
    // 子类Web继承父类Person
    class Web extends Person {
    
      constructor(name: string) {
        super(name);   // 表示调用父类的构造函数
      }
    
    }
    
    let w = new Web('李四');
    console.log(w.run());

    注意的是:如果子类和父类中有相同的方法名,则父类的方法被覆盖

    3.类里面的修饰符

    typescript里面定义属性的时候给我们提供了三种修饰符:

    • public:公有                    在当前类里面、子类、类外面都可以访问
    • protected:保护类型       在当前类里面、子类可以访问,类外部无法访问
    • private:私有                  不能在声明它的类的外部访问

    如果不加修饰符,默认就是公有

    (1)public

    // 父类
    class Person {
      public name: string;    // 公有属性
    
      constructor(name: string) {
        this.name = name;
      }
    
      run(): string {
        return `${this.name}在奔跑`;
      }
    }
    
    // 子类Web继承父类Person
    class Web extends Person {
    
      constructor(name: string) {
        super(name);   // 表示调用父类的构造函数
      }
    
      work() {
        console.log(`${this.name}在工作`);
      }
    }
    
    // 子类访问name
    let w = new Web('李四');
    w.work();
    
    // 类外部访问name
    let p = new Person('XXX');
    console.log(p.name);

    (2)protected

    // 父类
    class Person {
      protected name: string;    // 保护属性
    
      constructor(name: string) {
        this.name = name;
      }
    }
    
    // 子类Web继承父类Person
    class Web extends Person {
    
      constructor(name: string) {
        super(name);   // 表示调用父类的构造函数
      }
    
      work() {
        console.log(`${this.name}在工作`);
      }
    }
    
    // 子类访问name :可以访问
    let w = new Web('李四');
    w.work();
    
    // 类外部访问name
    let p = new Person('XXX');
    console.log(p.name);  // 报错

    此时如果打印父类里面的保护属性会出现如下报错:

     (3)private

    // 父类
    class Person {
      private name: string;    // 私有属性
    
      constructor(name: string) {
        this.name = name;
      };
    
    }
    
    // 子类Web继承父类Person
    class Web extends Person {
    
      constructor(name: string) {
        super(name);   // 表示调用父类的构造函数
      }
    
      work() {
        console.log(`${this.name}在工作===protected`);
      }
    }
    
    // 子类访问name :可以访问
    let w = new Web('李四');
    w.work();

    此时在子类中已经无法访问父类中的属性,会出现如下报错:

  • 相关阅读:
    python爬虫系列:三、URLError异常处理
    python系列:二、Urllib库的高级用法
    python系列:一、Urllib库的基本使用
    二十七、mysql如何确保数据不丢失?有几点值得我们借鉴
    二十六、聊聊mysql如何实现分布式锁
    二十五、sql中where条件在数据库中提取与应用浅析
    Idea 使用YapiUpload上传接口到Yapi
    Yapi部署
    centos安装nodejs
    mongo部署(linux)
  • 原文地址:https://www.cnblogs.com/codexlx/p/12770513.html
Copyright © 2011-2022 走看看