TypeScript笔记【2】类、继承、多态

和C++,C#那些可以面向对象的语言那样,TS也可以面向对象。

与JS相比,TS更像传统的面向对象语言(如Java,C#)。所以,TS有类。

一、类

定义一个类,要用关键字【class】。

class Animai {
    name: string
    eat(): void {
        alert(this.name + ‘吃‘);
    }
    sleep(): void {
        alert(this.name + ‘睡觉‘)
    }
    breath(): void {
        alert(this.name + ‘呼吸‘);
    }
    constructor(name: string) {
        this.name = name;
    }
}

这里定义了一个类Animal,constructor是它的构造函数。与C++不同,TS的构造函数的名字必须是constructor,而不是与类名相同。由于TS有GC,所以TS的类没有析构函数。

Animal中有个成员变量name,还有三个方法:eat、sleep、breath。一个类的对象调用类的方法也是通过点号(.),例如:

var ani: Animal = new Animal(‘杰瑞‘);
ani.eat();

二、继承

TS通过关键字extends实现继承。下面的代码,有一个类Fish继承了Animal,并重写了breath方法。

class Fish extends Animai {
    constructor(name: string) {
        super(name);
    }
    breath(): void {
        alert(this.name + ‘吐泡‘);
    }
}

三、多态

如果没有多态,继承就会黯然失色。

下面的函数实现了Animal的多态。

function Breath(p: Animai): void {
    p.breath();
}

如果p是一个Animal,则会显示“呼吸”,如果p是一个Fish,则会显示“吐泡”。

多态的用法和C++的多态极其类似。不妨比较一下:

class X
{
public:
    virtual ~X(){}
    virtual void Func()
    {
        std::cout << "X::Func" << std::endl;
    }
};

class Y : public X
{
public:
    virtual ~Y(){}
    void Func() override
    {
        std::cout << "Y::Func" << std::endl;
    }
};

void Test(X &x)
{
    x.Func();
}

void main()
{
    X x;
    Y y;
    Test(x); // X::Func
    Test(y); // Y::Func
}

四、与HTML配合

前端编程语言还是要和HTML配合的。下面给出一个例子,其中用到了继承与多态。

HTML部分:

<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8" />
    <title>TypeScript</title>
    <script src="app.js"></script>
</head>
<body>
    <h1>TypeScript</h1>

    <p><input id="btn1" type="button" value="动物呼吸" /></p>
    <p><input id="btn2" type="button" value="鱼吐泡" /></p>
</body>
</html>

TypeScript部分:

class Animai {
    name: string
    eat(): void {
        alert(this.name + ‘吃‘);
    }
    sleep(): void {
        alert(this.name + ‘睡觉‘)
    }
    breath(): void {
        alert(this.name + ‘呼吸‘);
    }
    constructor(name: string) {
        this.name = name;
    }
}

class Fish extends Animai {
    constructor(name: string) {
        super(name);
    }
    breath(): void {
        alert(this.name + ‘吐泡‘);
    }
}

function Breath(p: Animai): void {
    p.breath();
}

window.onload = () => {
    var a: Animai = new Animai(‘杰瑞‘);
    var f: Fish = new Fish(‘迈克‘);

    var btn1 = document.getElementById(‘btn1‘);
    var btn2 = document.getElementById(‘btn2‘);

    btn1.onclick = () => {
        Breath(a);
    }

    btn2.onclick = () => {
        Breath(f);
    }
};

效果如下:

时间: 2024-08-04 07:25:25

TypeScript笔记【2】类、继承、多态的相关文章

C++ 学习笔记之---类继承

参考自<C++ Primer Plus 6th Edition> 除了修改代码外,有两种方法能够用来扩展类的定义,一个是组合,另一个就是继承 组合:  使用类型为别类的成员变量 继承:  从已有的类派生出新类,在新类中加入新的成员 本文仅讨论继承中的公有继承 (class derivedClass : public baseClass) 分为三部分: 第一部分讲述多态,第二部分讲述派生类的方法,第三部分讲一些额外补充的知识,比较杂 第一部分 多态 概念:   多态是针对类中的成员函数而言的.设

c++ 植物类 继承多态 菱形继承

#pragma once//头文件 #include <iostream> #include<string> using namespace std; // // 1.实现以下几个类的成员函数 // 2.实现一个虚函数的覆盖及调用 // 3.处理菱形继承问题. // // 植物 class Botany { public: Botany(const string&  name); virtual ~Botany(); virtual void Display(); Bota

java新手笔记14 类继承示例

1.Person package com.yfs.javase; public class Person { private String name; private int age; private char sex; private void privateMehtod() { System.out.println("call privateMehtod()..."); } public Person() { //System.out.println("创建Perosn对

No2_3.接口继承多态_Java学习笔记_多态

多态: 1 /** 2 * 3 * @author 作者:sunshine 4 * @date 创建时间:2016年7月4日 下午5:22:19 5 */ 6 7 class Calculate{ 8 final float PI=3.14f; 9 //求圆形的面积 10 public float getArea(float r){ 11 float area=PI*r*r; 12 return area; 13 } 14 //求矩形的面积 15 public float getArea(flo

Java中关于继承、类、多态、接口的知识点

继承 含义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类 优点:1)代码的重用性:2)子类扩展父类的属性和方法:3)父类的属性和方法可用于子类:4)设计应用程序变得更加简单 继承的实现: 关键字extends:继承其ted他类,可以继承public,protected public class Salary extends Employee super关键字: 作用:调用父类中重写的方法 注意:调父类构造器是第一句可执行语句:默认情况下子类会调用父类的无参

C++笔记(4):继承和多态实例总结

继承与多态 1.继承与派生的基础 2.派生类的使用 3.多态 4.抽象类 ------------------------------------------------------------------------------------------------------------------------------ 1.继承与派生的基础 面向对象编程的主要目的之一就是提供可重用的代码.强调可重用性.使用C语言进行编程时,可以使用C标准的各种函数.C++提供更高层次的重用,如类库.通过继

C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类

类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. 1 //单继承的定义 2 class B:public A 3 { 4 < 派生类新定义成员> 5 }; 6 //多继承的定义 7 class C:public A,private B 8 { 9 < 派生类新定义成员> 10 }; 我们这篇主要说单继承. 派生类共有三种C++类继承方式: 公有继承(public) 基类的公有成员和保护成

python开发面向对象基础:接口类&amp;抽象类&amp;多态&amp;多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程