美文网首页
Typescript中的多态、抽象类、接口

Typescript中的多态、抽象类、接口

作者: wyc0859 | 来源:发表于2022-03-16 00:02 被阅读0次

多态:

父类的对象变量可以接受任何一个子类的对象
从而用这个父类的对象变量来调用子类中重写的方法而输出不同的结果.

产生多态的条件: 1.必须存在继承关系 2.必须有方法重写

多态的好处: 利于项目的扩展【从局部满足了 开闭原则--对修改关闭,对扩展开放】

多态的局限性: 无法直接调用子类独有方法,必须结合instanceof类型守卫来解决

抽象类:

和普通类区别:
1、多abstract 关键字,且不能被实例化
2、有抽象方法(但不能有方法体),子类必须重写抽象方法

abstract class People {
  public name!: string;

  //抽象方法,子类必须重写
  public abstract info(): void; //不能有方法体

  //不是抽象方法,子类不用必须重写
  public eat() {
    console.log("人类-吃饭");
  }
}

class Man extends People {
  public info() {
    console.log("男人");
  }
}

class Woman extends People {
  public bar() {
    console.log("女人特征");
  }
  public info() {
    console.log("女人");
  }
}

class girl extends People {
  public info() {
    console.log("女孩");
  }
}
// 父类的对象变量people可以接受任何一个子类的对象,
let people: People = new Woman();
// 从而用这个父类的对象变量来调用子类中重写的方法而输出不同的结果.
people.info();
people = new Man();
people.info();
//无法直接调用子类独有方法
//people.bar();//未编译就报错:类型“People”上不存在属性“bar”
people = new girl();
people.info();

适配器: interface + 抽象类

interface People {
  names: string;
  eat(): void;
  school(): void;
}

class XiaoZ implements People {
  public names = "小张";
  eat() {
    console.log("小张吃饭");
  }
  school() {
    console.log("小张在上学");
  }
}

由于接口(implements),必须实现所有方法。但老张并不上学,该怎么去掉school?
abstract class Man implements People {
  public abstract names: string;
  public abstract eat(): void;
  public school() {}
}
class LaoZ extends Man {
  public names = "老张";
  eat() {
    console.log("老张吃饭");
  }
}

以上方法完美解决,这样的抽象类也称为适配器

相关文章

  • Typescript中的多态、抽象类、接口

    多态: 父类的对象变量可以接受任何一个子类的对象从而用这个父类的对象变量来调用子类中重写的方法而输出不同的结果. ...

  • java抽象类和接口小记

    Java抽象类和接口小记 Java抽象类和接口实现了java的多态.多态是面向对象程序语言的核心,在项目开发过程中...

  • 接口和抽象类该如何取舍

    抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。 “面向接口编程”中...

  • kotlin中的面相对象

    目录 抽象类与接口 多态和接口代理 kotlin中接口函数冲突问题 类及其成员的可见性 object(单例模式) ...

  • Kotlin中的面向对象详解

    目录 抽象类与接口 多态和接口代理 kotlin中接口函数冲突问题 类及其成员的可见性 object(单例模式) ...

  • 芦继超10.27总结

    今天老师讲了多态,抽象类,和接口,多态和抽象类还是挺好理解的,之后的接口没太懂,不会用,下午助教老师又讲了一下,收...

  • 17.03.11 .Net基础(二)

    多态 虚方法 virtual override 抽象类 abstract override 接口 interfac...

  • Spring的学习

    接口和抽象类? 抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。1....

  • P11 Dart 抽象类 多态 和 接口

    1.抽象类2.多态3.接口 //抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口//1.通过abs...

  • JavaSE第11篇:面向对象之接口、多态

    核心概述:本篇我们将学习面向对象中的接口和多态,接口类似我们之前学习继承时的父类或抽象类,接口与众不同的时,接口中...

网友评论

      本文标题:Typescript中的多态、抽象类、接口

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