zoukankan      html  css  js  c++  java
  • ts中interface与class的区别

    interface -- 接口只声明成员方法,不做实现。

    class -- 类声明并实现方法。

    那么接口有什么用呢?设想如下需求:

    要实现一个print函数,它将传入的对象打印出来。在实际实现上,它将调用对象的getContent方法:

    function print(obj): void {
        console.log(obj.getContent());
    }

    但是这样书写是有问题的,你知道Typescript当中是有类型检查的,必须要确保obj中存在getContent方法才能让print函数正常工作不报错。如下:

    class Article {
        public function getContent(): String {
            return 'I am an article.';
        } 
    }
    
    function print(obj: Article): void {
        console.log(obj.getContent());
    }
    
    let a = new Article();
    print(a);    

    但是这样的话print函数不就只能打印Article类的对象了吗,如果我想要让它能够打印不止一个类的对象呢?我如何保证他们都有getContent方法?

    这时候就可以用到接口,来声明一个getContent方法,这样一来,每个实现该接口的类都必须实现getContent方法:

    interface ContentInterface {
        getContent(): String;
    }
    
    class Article implements ContentInterface {
        // 必须实现getContent方法
        public function getContent(): String {
            return 'I am an article.';
        } 
    }
    
    class Passage implements ContentInterface {
        // 但实现方式可以不同
        public function getContent(): String {
            return 'I am a passage.'
        }
    }
    
    class News implements ContentInterface {
        // 没有实现getContent方法,编译器会报错
    }
    
    function print(obj: ContentInterface): void {
        // 实现了ContentInterface的对象是一定有getContent方法的
        console.log(obj.getContent());
    }
    
    let a = new Article();
    let p = new Passage();
    
    print(a); // "I am an article."
    print(p); // "I am a passage."    
  • 相关阅读:
    2019-1-17水晶报表函数大全
    2019-1-17【水晶报表内功心法】--推拉之间
    2019-1-17水晶报表技巧总结【二】
    2019-1-16 水晶报表自动补空行
    2019-1-16水晶报表技巧总结【一】
    博客园添加访客人数
    2019-1-11存储过程的查看
    2019-1-11数据库重构
    lcx端口转发 linux版
    PentesterLab-From SQL Injection to Shell: PostgreSQL edition
  • 原文地址:https://www.cnblogs.com/minigrasshopper/p/7693478.html
Copyright © 2011-2022 走看看