申明一个类 class

class 类名 {// class中主要包含两个部分,属性和方法属性方法
}

实例属性和类属性

  • 实例属性:实例化之后,也就是new之后才能用的属性和方法
  • 类属性(静态属性):class本身自己直接使用的,下面是TS中的属性修饰符
    • static:静态属性,属于类自身不属于实例,只有自身可以访问到
    • readonly:只读属性,只允许读取,不允许修改
    • public:所有属性的默认属性。随意读写
    • private:申明是一个私有属性,不允许在外部访问
    • protected:和private基本一样,也是不允许在外部访问,但是允许在子 类中访问
  • demo
    class Person {// 定义实例属性name:string = '景天';// 在属性前使用static关键字可以定义类属性static age:number = 18;// 定义实例方法sayHello() {console.log('Hello')}// 定义类方法static sayHi() {console.log('Hi')}
    }// 实例属性和方法的使用
    class p = new Person()
    console.log(p.name)
    p.sayHello()// 类属性和方法的使用
    console.log(Person.age)
    Person.sayHi()
    

class中的构造函数(constructor)

  • 常规写法

    class Person {name: stringage: number// constructor 被称为构造函数// 构造函数会在实例对象创建的时候调用constructor(name:string,age:number) {// 在实例方法中,this就是表示当前的实例// 在构造函数中,当前对象就是当前新建的那个对象// 可以通过this向新建的对象中添加属性this.name = namethis.age = age}sayHi() {// 在实例方法中,可以通过this来表示当前调用方法的对象console.log(this)console.log(`你好,我是${this.name}`)}
    }class p = new Person('景天',18)
    console.log(p.name,p.age)
    
  • 简写方式
    class Person {// 可以把属性的定义写到构造函数的参数中去,所示一种语法糖的写法constructor(public name:string, public age:number) {}sayHi() {console.log(`你好,我是${this.name}`)}
    }class p = new Person('景天',18)
    console.log(p.name,p.age)
    

class中的继承

  • 使用继承后,子类将会拥有父类所有的方法和属性。
  • 如果子类中和父类中有相同的属性和方法,子类中会覆盖父类的方法。
  • 使用:子类 extends 父类
  • demo
    // 创建一个父类
    class Animal {name: stringconstructor(name:string) {this.name = name}sayHi() {console.log('动物们说Hi')}
    }// 狗这个子类继承父类
    class Dog extends Animal {age: numberconstructor(name:string,age:number) {// 如果在子类中写了构造函数,在子类的构造函数中必须要调用下父类的构造函数// super就是代表父类中的构造函数super(name);this.age = age}// 添加一个自己的方法run() {console.log('我在跑呢')}
    }// 猫这个子类继承父类
    class Cat extends Animal {// 子类中也有sayHi方法,会覆盖父类中的方法,使用自己的方法sayHi() {console.log('喵喵喵喵')}
    }let dog = new Dog('哮天犬',1000)
    dog.sayHi()
    dog.run()
    let cat = new Cat('九命猫妖')
    cat.sayHi()
    

抽象类和抽象方法

  • 抽象类:用abstract开头,这代表是一个抽象类,抽象类和其他类的区别不大,只是不能用来创建对象。
  • 抽象方法:同样abstract开头,抽象方法只能定义在抽象类中,并且子类中必须对抽象方法进行重写。
  • demo
    // 创建一个父类
    /* 我们之前创建的父类,除了可以被继承,自己也可以实例化,但是有时候我们就想申明一个父类,不允许实例化。那么可以用abstract开头,这代表是一个抽象类,抽象类和其他类的区别不大,只是不能用来创建对象。可以说抽象类就是用来创建父类给子类继承的。抽象类中可以添加抽象方法。
    */
    abstract class Animal {name: stringconstructor(name:string) {this.name = name}// 定义一个抽象方法,同样abstract开头,没有方法体。// 抽象方法只能定义在抽象类中,并且子类中必须对抽象方法进行重写。// void:空值abstract sayHi():void
    }class Dog extends Animal {sayHi() {console.log("汪汪汪")}
    }let a = new Animal() // 这样就会报错,因为不允许实例化
    

接口

  • 和抽象类相比

    • 抽象类的属性值可以是有值得也可以是没值,接口的属性值都是没值的,只定义结构,不考虑实际值
    • 接口中所有的方法都是抽象方法。
    • 使用抽象类,是用extends继承,可以继承父类的方法,也可以重写。接口是使用implements,而且必须满足接口中所有要求
  • demo
    // 定义一个接口
    interface myInter {name: stringsayHello():void
    }// 定义一个类去实现上面的接口,必须满足接口的所有要求
    class Myclass implements myInter {name:stringconstructor(name:string) {this,name = name}sayHello() {console.log('Hello')}
    }// 接口如何扩展呢?可以使用extends扩展,但是原来的不会改变
    interface myInter2 extends myInter {age: number
    }// 需要注意的一点是,接口是允许重复的,并不会覆盖,而是会合并
    // 下面这样的,obj就会有两个属性name和age
    interface obj {name: string
    }
    interface obj {age: number
    }
    

属性的封装

  • 应用场景:有时候我们不想属性简单的暴露出去,也不想被随意更改
  • 简单的封装
    class Person {/* TS可以在属性前面添加修饰符- static:静态属性,属于类自身不属于实例,只有自身可以访问到- readonly:只读属性,只允许读取,不允许修改- public:所有属性的默认属性。随意读写- private:申明是一个私有属性,不允许在外部访问- protected:和private基本一样,也是不允许在外部访问,但是允许在子类中访问*/// 私有化两个属性private _name:stringprivate _age: numberconstructor(name:string,age:number) {this._name = name;this._age = age;}// 提供给外界访问和修改私有属性的方法getName() {return this._name}setName(value:string) {this._name = value}getAge() {return this._name}setAge(value:number) {if(value > 0) {this._age = value}}
    }let p = new Person('景天',18)console.log(p.getName());
    p.setName('雪见')
    console.log(p.getAge());
    p.setAge(17)
    
  • 存取器,比上面简单的封装好的多,这才是常用的方式
    // 使用属性存取器
    class Person {// 私有化两个属性private _name:stringpaivate _age: numberconstructor(name:string,age:number) {this._name = name;this._age = age;}// 提供给外界访问和修改私有属性的方法get name() {return this._name}set name(value:string) {this._name = value}get age() {return this._name}set age(value:number) {if(value > 0) {this._age = value}}
    }let p = new Person('景天',18)console.log(p.name);
    p.name = '雪见'
    console.log(p.age);
    p.age = 17
    

Tyspscript中的class相关推荐

  1. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  2. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  3. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  4. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  5. 总结一下在使用某里云服务器的过程中出现过的一些问题

    此文总结在使用阿里云的过程中出现过的问题   想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...

  6. Kubernetes 中 设置pod不部署在同一台节点上

    在k8s中,节点的调度主要由亲和性和污点来进行控制的.   而在亲和性部分由分为了节点亲和性和节点反亲和性.   节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...

  7. 在Dockerfile中设置G1垃圾回收器参数

    在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...

  8. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  9. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

最新文章

  1. 程序员晒元宵节福利,网友:看了我想砸键盘......
  2. Android通过Scheme协议打开APP界面
  3. python easy install_Python 安装easy_install详解
  4. centos 7 yum 安装 MongoDB 4.2
  5. 最常见的13种主数据管理(MDM)词汇和定义
  6. c语言float m1 m2什么意思,m1和m2的区别,一文带你秒懂这两者的关联
  7. bt种子文件文件结构
  8. 信息学奥赛一本通1045
  9. 线控转向——Carsim与simulink联合仿真模型 包含转向电机模型,转向执行机构模型,齿轮齿条模型
  10. 游戏里的攻防-检测与反检测
  11. (亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
  12. RPC框架简析--Pigeon
  13. 打开文件位置在计算机游戏里面,Win7电脑“打开或关闭windows功能”里面没有游戏文件夹的修复方法...
  14. 解决谷歌浏览器打开控制台有延迟
  15. oracle如何设置连接数,关于Oracle连接数设置
  16. WPS的word文档页面右边有一段空白原因
  17. Go语言自学系列 | go语言数字类型
  18. 多目立体匹配的前世今生 | 聊一聊MVS及其在3D检测中的应用
  19. mysql show tables_mysql show命令用法
  20. ubuntu 的远程桌面客户端工具tsclient

热门文章

  1. Android Studio 中列表视图(ListView)的应用
  2. 车载诊断系列——CANoe基础诊断功能
  3. 育英计算机学校,萧山育英实验学校
  4. 又是为了触屏移动设备而设计
  5. 阿姆斯特朗数。。。。
  6. Shell语法与案例
  7. impala 时区问题
  8. 计算机科学与技术见面会报道,计算机科学与技术学院2019级专业见面会顺利召开...
  9. BloomFilter简介
  10. OpenCV像素处理基本操作 Open_CV系列(二)