本篇围绕这类的继承, 泛型, 接口的知识来叙述 TypeScript, 同时也解释了其实与 java 或 kotlin 等语言很相似的原因.
1. 类的继承 (就跟 js 中的原型是类似的)
什么是继承: 可以去百度一下 java 中的继承的概念, 就不做过多的描述了, 偷个懒
实例: 先定义一个父类 Fuit 水果类, 再定义两个子类, 且在父类 Fuit 中定义了一个 eat 方法
- /**
- * 类 继承, 访问控制符
- */
- // 父类: 水果
- class Fuit {
- // 定义成员变量 只有子类才能访问此属性
- protected name: string;
- // 构造方法
- constructor(name) {
- this.name = name;
- }
- // 默认是公共方法 public
- eat() {
- console.log(` 我正在吃:${this.name}`)
- }
- }
- // 苹果: 水果的子类
- class Apple extends Fuit {
- // 定义私有属性的成员变量 外部是不能够访问此变量的 (只是一个演示)
- private age: number;
- // 在继承父类的构造方法上 自增一个属性, 更改构造
- constructor(name, age) {
- super(name); // 调用父类的构造
- this.age = age;
- }
- // 打印种龄方法
- public displayAge() {
- console.log("我的种龄是:" + this.age)
- }
- }
- // 香蕉: 水果的子类
- class Banana extends Fuit {
- private age: number;
- // 在继承父类的构造方法上 自增一个属性, 更改构造 (只是一个演示)
- constructor(name, age) {
- super(name);
- this.age = age;
- }
- // 打印种龄方法
- public displayAge() {
- console.log("我的种龄是:" + this.age);
- // 调用自身的私有方法 因为外部是不能够通过实例化 Banana 调用 displayName() 这个私有方法的
- this.displayName();
- }
- // 打印名称方法
- private displayName() {
- console.log("我的名称是:" + this.name)
- }
- public getName() {
- return this.name;
- }
- }
- // 实例化 Apple
- let apple = new Apple("苹果", 2);
- // 因为 Apple 继承了 Fuit, 而且 Fuit 类中 eat() 方法不是私有的, 所以 Apple 类可以调用其父类中不是私有的 eat() 方法
- apple.eat();// 打印结果:"我正在吃: 苹果"
- apple.displayAge();// 调用 Apple 类自身的 displayAge() 方法
- // 实例化 Banana
- let banana = new Banana("香蕉", 3);
- banana.eat();
- banana.displayAge();
2. 泛型
什么是泛型: 可以去百度一下 java 中的泛型的概念, 就不做过多的描述了, 偷个懒
- //1. 定义 Array 数组, 数组中存放 Banana 香蕉这个类
- let bananaArr: Array = [new Banana("菠萝香蕉", 2), new Banana("苹果香蕉", 3), new Banana("篱笆香蕉", 5)];
- bananaArr.forEach(value => {
- console.log(value.getName()); // 循环打印出香蕉中名称
- });
- //2. 利用泛型建立一个公共的数据模型类
- class CommentBean {
- private key: K;
- private value: V;
- setValue(key: K, value: V) {
- this.key = key;
- this.value = value;
- }
- getValue():V {
- return this.value;
- }
- }
- let commentBean = new CommentBean<number, string>();
- commentBean.setValue(1, "你好阿");
- console.log(commentBean.getValue());
3. 接口
什么是接口:
接口通常以 interface 来声明. 一个类通过继承接口的方式, 从而来继承接口的抽象方法;
接口并不是类, 编写接口的方式和类很相似, 但是它们属于不同的概念. 类描述对象的属性和方法. 接口则包含类要实现的方法.
除非实现接口的类是抽象类, 否则该类要定义接口中的所有方法.
接口无法被实例化, 但是可以被实现. 一个实现接口的类, 必须实现接口内所描述的所有方法, 否则就必须声明为抽象类. 另外, 在 Java 中, 接口类型可用来声明一个变量, 他们可以成为一个空指针, 或是被绑定在一个以此接口实现的对象.
....
可以去百度一下 java 中的接口的概念, 就不做过多的描述了, 偷个懒
- // 定义一个接口
- interface ILogin {
- login(): void; // 定义一个登录的抽象方法
- getUserInfo(): string; // 定义一个获取用户信息的抽象方法
- }
- // 微信登录类 实现了 ILogin 接口
- class WeiXinHttpRequest implements ILogin {
- getUserInfo(): string { // 实现接口中的方法
- return "用户信息: 微信的用户信息";
- }
- login(): void { // 实现接口中的方法
- console.log("执行微信登录了");
- }
- }
- //QQ 登录类 实现了 ILogin 接口
- class QQHttpRequest implements ILogin {
- getUserInfo(): string { // 实现接口中的方法
- return "用户信息: QQ 的用户信息";
- }
- login(): void { // 实现接口中的方法
- console.log("执行 QQ 登录了");
- }
- }
来源: https://www.2cto.com/kf/201807/760158.html