摘要:二正文中與的區別接口只聲明成員方法,不做實現。在中,我們可以采用全新的基于類繼承的模式設計更優雅的語義化接口,這是因為中的可以繼承動態構造的類,這一點和其他的靜態聲明類的編程語言不同。
一 前言
1.在typescript上遇到過實例化對象的兩種寫法:implement和extends。extends很明顯就是ES6里面的類繼承,那么implement又是做什么的呢?它和extends有什么不同?
2.還有一個問題就是:typescript 有接口的概念,這個接口和類有什么關系嗎?
帶著以上兩個問題我們一起看一下這篇文章。
二 正文 1.ts中interface與class的區別interface:接口只聲明成員方法,不做實現。
class:類聲明并實現方法。
也就是說:interface只是定義了這個接口會有什么,但是沒有告訴你具體是什么。
例如:
interface Point { lng:number; lat:number; sayPosition():void; }
Point interface 里面包含數值類型的經緯度和一個sayPosition函數,但是具體內容沒有定義,需要你自己在子類中實現。
而class則是完整的實現:
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中不支持多重繼承,但是可以用接口來實現,這樣就要用到implements,繼承只能繼承一個類,但implements可以實現多個接口,用逗號分開就行了
比如:
class A extends B implements C,D,E
在英文中:
implements 就是:實現的意思。
“implement是實現一個接口,要自己實現這個接口的方法”
implements就是實現的意思,顧名思義它實現一個已經定義好的接口中的方法!如:
public interface MyInterface{ public String MyInterfaceMethod1ToReturnString(); public void MyIntefaceMethod2(); ...... //在這里定義一系列不需要實現的方法,其實現過程"延續到"他的子類中 }
實現接口方法:
public MyImplClass implements MyInterface{ public String MyInterfaceMethod1ToReturnString(){ return "My String here!"; } public void MyIntefaceMethod2(){ //Do something else here! } }3.ES6中使用Mixin實現“多重繼承”
熟悉 JavaScript 的同學應該對 mixin 模式并不陌生。我們說 JavaScript / ES5 的繼承模型是基于單一原型鏈的繼承模型,通常情況下,在 JavaScript 實踐中完全用原型鏈來實現繼承式的代碼復用,是遠遠不能滿足需求的。因此實戰中,我們的代碼抽象基本上都是采用混合的模式,既有原型繼承,也有 mixin 組合。
在 ES6 中,我們可以采用全新的基于類繼承的 “mixin” 模式設計更優雅的“語義化”接口,這是因為 ES6 中的 extends 可以繼承動態構造的類,這一點和其他的靜態聲明類的編程語言不同。
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+""); //通過序列化反序列化復制對象 console.log(employee2, employee2 instanceof Employee, //true employee2 instanceof Person, //true employee == employee2); //false
在上面的代碼里,我們改變了 Serializable,讓它成為一個動態返回類型的函數,然后我們通過 class Employ extends Serializable(Person) 來實現可序列化,在這里我們沒有可序列化 Person 本身,而將 Serializable 在語義上變成一種修飾,即 Employee 是一種可序列化的 Person。
三 后記參考鏈接:
Classes
類的裝飾器:ES6 中優雅的 mixin 式繼承
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95321.html
摘要:在抽象類中,聲明的是,可是。抽象類只能作為子類的超類,子類繼承抽象類時必須被實現。它根本不存在方法的實現實現子類使用關鍵字來繼承抽象類。添加新方法如果你往抽象類中添加新的方法,你可以給它提供默認的實現。轉自,抽象類與接口的區別 抽象類與接口 抽象類與接口一樣,都不能被實例化,可以有具體實現的方法,也可以有抽象的方法。在抽象類中,聲明的field是static、final,method可...
摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發就是不斷的創建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內存圖,成...
摘要:很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。 在討論它們之間的不同點之前,我們先看看抽象類...
摘要:抽象類和接口抽象類抽象方法是只有方法簽名,沒有方法實現的方法。抽象類不能被實例化,抽象類可以包含方法抽象和普通成員變量構造器初始化塊內部類接口枚舉種成分。抽象類的構造器不能用于創建實例,主要用于被其子類調用。 抽象類和接口 1.抽象類 抽象方法是只有方法簽名,沒有方法實現的方法。有抽象方法的類只能被定義成抽象類,抽象類可以沒有抽象方法。抽象方法和抽象類必須使用abstract修飾符來定...
摘要:抽象類支持抽象類和抽象方法。接口是一種特殊的抽象類,這種抽象類中只包含抽象方法和靜態常量。對抽象類的使用是通過關鍵字。抽象類中可以聲明各種類型成員變量,實現數據的封裝。一個類可以同時實現多個接口,但一個類只能繼承于一個抽象類。 抽象類 php5支持抽象類和抽象方法。類前加 abstract, 此類就成為抽象類,無法被實例化,此類天生就是用來被繼承的,給子類提供了一個類的模板;類方法前加...
閱讀 2785·2021-10-14 09:42
閱讀 3608·2021-10-11 10:59
閱讀 2941·2019-08-30 11:25
閱讀 3074·2019-08-29 16:25
閱讀 3224·2019-08-26 17:40
閱讀 1225·2019-08-26 13:30
閱讀 1143·2019-08-26 11:46
閱讀 1329·2019-08-23 15:22