成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

TS 類與接口

garfileo / 900人閱讀

摘要:二正文中與的區(qū)別接口只聲明成員方法,不做實現(xiàn)。在中,我們可以采用全新的基于類繼承的模式設(shè)計更優(yōu)雅的語義化接口,這是因為中的可以繼承動態(tài)構(gòu)造的類,這一點和其他的靜態(tài)聲明類的編程語言不同。

一 前言

1.在typescript上遇到過實例化對象的兩種寫法:implement和extends。extends很明顯就是ES6里面的類繼承,那么implement又是做什么的呢?它和extends有什么不同?

2.還有一個問題就是:typescript 有接口的概念,這個接口和類有什么關(guān)系嗎?

帶著以上兩個問題我們一起看一下這篇文章。

二 正文 1.ts中interface與class的區(qū)別

interface:接口只聲明成員方法,不做實現(xiàn)。

class:類聲明并實現(xiàn)方法。

也就是說:interface只是定義了這個接口會有什么,但是沒有告訴你具體是什么。
例如:

interface Point {
    lng:number;
    lat:number;
    sayPosition():void;
}

Point interface 里面包含數(shù)值類型的經(jīng)緯度和一個sayPosition函數(shù),但是具體內(nèi)容沒有定義,需要你自己在子類中實現(xiàn)。

而class則是完整的實現(xiàn):

class Point {
    constructor(lng,lat){
        this.lng = lng;
        this.lat = lat;
    }
    sayPosition(){
        console.log("point:",this.lng,this.lat);
    }
}
2.extends 與 implement

(1)extends是繼承父類,只要那個類不是聲明為final或者那個類定義為abstract的就能繼承。

(2)java中不支持多重繼承,但是可以用接口來實現(xiàn),這樣就要用到implements,繼承只能繼承一個類,但implements可以實現(xiàn)多個接口,用逗號分開就行了
比如:

 class A extends B implements C,D,E

在英文中:
implements 就是:實現(xiàn)的意思。
“implement是實現(xiàn)一個接口,要自己實現(xiàn)這個接口的方法”
implements就是實現(xiàn)的意思,顧名思義它實現(xiàn)一個已經(jīng)定義好的接口中的方法!如:

public interface MyInterface{
    public String MyInterfaceMethod1ToReturnString();
    public void MyIntefaceMethod2();
    ......
    //在這里定義一系列不需要實現(xiàn)的方法,其實現(xiàn)過程"延續(xù)到"他的子類中
}

實現(xiàn)接口方法:

public MyImplClass implements MyInterface{
    public String MyInterfaceMethod1ToReturnString(){
         return "My String here!";
    }
    public void MyIntefaceMethod2(){
         //Do something else here!
    }
}
3.ES6中使用Mixin實現(xiàn)“多重繼承”

熟悉 JavaScript 的同學(xué)應(yīng)該對 mixin 模式并不陌生。我們說 JavaScript / ES5 的繼承模型是基于單一原型鏈的繼承模型,通常情況下,在 JavaScript 實踐中完全用原型鏈來實現(xiàn)繼承式的代碼復(fù)用,是遠遠不能滿足需求的。因此實戰(zhàn)中,我們的代碼抽象基本上都是采用混合的模式,既有原型繼承,也有 mixin 組合。

在 ES6 中,我們可以采用全新的基于類繼承的 “mixin” 模式設(shè)計更優(yōu)雅的“語義化”接口,這是因為 ES6 中的 extends 可以繼承動態(tài)構(gòu)造的類,這一點和其他的靜態(tài)聲明類的編程語言不同。

const Serializable = Sup => class extends Sup {
  constructor(...args){
    super(...args);
    if(typeof this.constructor.stringify !== "function"){
      throw new ReferenceError("Please define stringify method to the Class!");
    }
    if(typeof this.constructor.parse !== "function"){
      throw new ReferenceError("Please define parse method to the Class!");
    }
  }
  toString(){
    return this.constructor.stringify(this);
  }
}

class Person {
  constructor(name, age, gender){
    Object.assign(this, {name, age, gender});
  }
}

class Employee extends Serializable(Person){
  constructor(name, age, gender, level, salary){
    super(name, age, gender);
    this.level = level;
    this.salary = salary;
  }
  static stringify(employee){
    let {name, age, gender, level, salary} = employee;
    return JSON.stringify({name, age, gender, level, salary});
  }
  static parse(str){
    let {name, age, gender, level, salary} = JSON.parse(str);
    return new Employee(name, age, gender, level, salary);
  }
}

let employee = new Employee("jane",25,"f",1,1000);
let employee2 = Employee.parse(employee+""); //通過序列化反序列化復(fù)制對象

console.log(employee2, 
  employee2 instanceof Employee,  //true 
  employee2 instanceof Person,  //true
  employee == employee2);   //false

在上面的代碼里,我們改變了 Serializable,讓它成為一個動態(tài)返回類型的函數(shù),然后我們通過 class Employ extends Serializable(Person) 來實現(xiàn)可序列化,在這里我們沒有可序列化 Person 本身,而將 Serializable 在語義上變成一種修飾,即 Employee 是一種可序列化的 Person。

三 后記

參考鏈接:
Classes
類的裝飾器:ES6 中優(yōu)雅的 mixin 式繼承

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95321.html

相關(guān)文章

  • 【Java】抽象類與接口

    摘要:在抽象類中,聲明的是,可是。抽象類只能作為子類的超類,子類繼承抽象類時必須被實現(xiàn)。它根本不存在方法的實現(xiàn)實現(xiàn)子類使用關(guān)鍵字來繼承抽象類。添加新方法如果你往抽象類中添加新的方法,你可以給它提供默認(rèn)的實現(xiàn)。轉(zhuǎn)自,抽象類與接口的區(qū)別 抽象類與接口 抽象類與接口一樣,都不能被實例化,可以有具體實現(xiàn)的方法,也可以有抽象的方法。在抽象類中,聲明的field是static、final,method可...

    mengbo 評論0 收藏0
  • java學(xué)習(xí)(三) —— 面對對象

    摘要:前言是面對對象的語言,因此有必要單獨紀(jì)錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發(fā)就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。面對對象設(shè)計其實就是在管理和維護對象之間的關(guān)系。 前言 java是面對對象的語言,因此有必要單獨紀(jì)錄下對象的各種定義和理解。 面對對象,主要包括:面向?qū)ο笏枷耄惻c對象及其使用,對象的內(nèi)存圖,成...

    褰辯話 評論0 收藏0
  • Java抽象類與接口的區(qū)別

    摘要:很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細(xì)討論這些話題。 在討論它們之間的不同點之前,我們先看看抽象類...

    Ethan815 評論0 收藏0
  • Java抽象類與接口

    摘要:抽象類和接口抽象類抽象方法是只有方法簽名,沒有方法實現(xiàn)的方法。抽象類不能被實例化,抽象類可以包含方法抽象和普通成員變量構(gòu)造器初始化塊內(nèi)部類接口枚舉種成分。抽象類的構(gòu)造器不能用于創(chuàng)建實例,主要用于被其子類調(diào)用。 抽象類和接口 1.抽象類 抽象方法是只有方法簽名,沒有方法實現(xiàn)的方法。有抽象方法的類只能被定義成抽象類,抽象類可以沒有抽象方法。抽象方法和抽象類必須使用abstract修飾符來定...

    wdzgege 評論0 收藏0
  • 【modernPHP專題(4)】抽象類與接口

    摘要:抽象類支持抽象類和抽象方法。接口是一種特殊的抽象類,這種抽象類中只包含抽象方法和靜態(tài)常量。對抽象類的使用是通過關(guān)鍵字。抽象類中可以聲明各種類型成員變量,實現(xiàn)數(shù)據(jù)的封裝。一個類可以同時實現(xiàn)多個接口,但一個類只能繼承于一個抽象類。 抽象類 php5支持抽象類和抽象方法。類前加 abstract, 此類就成為抽象類,無法被實例化,此類天生就是用來被繼承的,給子類提供了一個類的模板;類方法前加...

    Keven 評論0 收藏0

發(fā)表評論

0條評論

garfileo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<