码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-15 17:19:41      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

和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);
    }
};

效果如下:

技术分享

技术分享



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

标签:

原文地址:http://my.oschina.net/jthmath/blog/401981

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!