摘要:再拿動物來說,鳥類是動物的一種,它不光繼承了動物的特性,它還有自己的專屬特性它有翅膀,它能飛。常見多態(tài)有覆蓋重載兩類。抽象類抽象方法抽象類不能實例化,抽象方法不能實現(xiàn),需要在子類中實現(xiàn)。抽象類實現(xiàn)子類繼承了父類的類,是相對的。
類-面向?qū)ο蟮幕A
面向?qū)ο缶幊?,應該是目前使用最廣泛的編程模式。
JavaScript是基于原型的語言,自從廣泛使用之后,面向?qū)ο蟮母脑煲恢睕]停過,不少第三方庫都使用原型實現(xiàn)了JavaScript下面的類,如:MooTools,Backbone。再到ES6標準,直接原生支持了類定義,不過只能算語法糖級的支持。
TypeScript對面向?qū)ο笾С值母鼜氐?,非常接近Java、C#語言,支持接口、類、抽象、繼承、可見性等面向?qū)ο筇匦浴?/p> 面向?qū)ο笕筇卣?/b> 抽象
即同一類事物,我們可以把它抽象成一個描述,就是類。對外,我們看到的就是這個類描述,它有什么屬性,它能干嘛,取決于它對外公開的屬性和方法。它的內(nèi)部如何運作,我們無需關注。
比如我們要用面向?qū)ο笳Z言描述動物:動物有一個名字,動物能移動。它怎么做到移動呢,外部是不用關心的。
繼承如果抽象是基礎,那么繼承就是面向?qū)ο蟮母叻濉3橄蠼o了編程語言描述世界的畫筆,那么繼承就給了它色彩。
繼承類擁有父類公開的、保護的屬性和方法,同時還可以添加自己的屬性和方法。
一般分為實現(xiàn)繼承、接口繼承。
再拿動物來說,鳥類是動物的一種,它不光繼承了動物的特性,它還有自己的專屬特性:它有翅膀,它能飛。
多態(tài)多態(tài)簡單來說,就是同一個類的對象,表現(xiàn)出不同的特性,是繼承延伸出來的表現(xiàn)結(jié)果。
常見多態(tài)有覆蓋、重載兩類。
TypeScript中的類方法不支持真正意義上的重載,可以通過增加可選參數(shù)來達到重載的目的。
具體的原因,是因為重載在編譯之后,是以多個不同名的函數(shù)存在的,調(diào)用哪個也是編譯的時候確定的。而TypeScript需要支持JavaScript來調(diào)用它,JavaScript不知道編譯之后的函數(shù)名。
后面會拿一篇文章來分析。
還是拿動物為例,繼承并覆蓋move方法之后,鳥類實現(xiàn)了飛、魚類實現(xiàn)了游。
TypeScript中類使用的常見場景使用TypeScript描述類。
// 知識點:抽象類 abstract class Animal { // 知識點:私有成員 private _name: string; // 知識點:存取器 get name(): string { return this._name; } constructor(name: string) { this._name = name; } // 知識點:抽象方法 abstract move(distance: number): void; }
描述子類
// 知識點:實現(xiàn)抽象類的子類 class Bird extends Animal { // 知識點:只讀成員 // 知識點:靜態(tài)成員 static readonly classification = "bird"; // 知識點:super() constructor(name: string) { super(name); } // 知識點:抽象方法實現(xiàn) move(distance: number): void { console.log(`moved ${distance}.`) } } const enum MoveMode { WALK, FLY } // 知識點:子類 class Owl extends Bird { private _mode: MoveMode; get mode(): MoveMode { console.log("read move mode."); return this._mode; } set mode(mode: MoveMode) { console.log("changed move mode."); this._mode = mode; } // 知識點:super() constructor(name: string) { super(name); this._mode = MoveMode.FLY; } // 知識點:方法覆蓋 move(distance: number): void { switch (this._mode) { case MoveMode.FLY: console.log(`fly ${distance}.`); break; case MoveMode.WALK: console.log(`walked ${distance}.`); break; default:; } } }類相關的知識點總結(jié)
從上述示例中,整理出以下知識點,請結(jié)合示例回顧,加強一下理解。
抽象類、抽象方法
抽象類不能實例化,抽象方法不能實現(xiàn),需要在子類中實現(xiàn)。
抽象類實現(xiàn)
子類
繼承了父類的類,是相對的。
類成員可見性
public,公開,默認的可見性
protected,保護,子類可見
private,私有,本類可見
靜態(tài)成員
靜態(tài)成員屬于類
只讀成員
只讀,即初始化后不可修改,只能在聲明和構(gòu)造函數(shù)里初始化。
類成員存取器
可以像成員一樣來訪問,一般用來做一些處理,比如校驗,格式化等。
類方法覆蓋
覆蓋父類方法,實現(xiàn)自己的特性。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/110301.html
摘要:學習之路學習之路安裝環(huán)境起步開發(fā)工具自動編譯文件中的數(shù)據(jù)類型中的函數(shù)中類的定義繼承中的繼承中的繼承類的靜態(tài)屬性和靜態(tài)方法類的多態(tài)的抽象類中的接口中的泛型學習之路安裝環(huán)境查看版本起步新建通過命令編譯此時路徑下 ...
摘要:是的超級,遵循最新的規(guī)范相當于包含了的語法。表示方法沒有返回任何類型類型表示的是那些永不存在的值的類型,例如異常錯誤寫法錯誤三函數(shù)內(nèi)容概述函數(shù)的定義可選參數(shù)默認參數(shù)剩余參數(shù)函數(shù)重載箭頭函數(shù)。 一、Typescript 介紹、環(huán)境搭建 1.1 Typescript 介紹 1.TypeScript 是由微軟開發(fā)的一款開源的編程語言,像后端 java、C#這樣的面向?qū)ο笳Z言可以讓 js 開發(fā)...
摘要:序列文章從項目中由淺入深的學習微信小程序和快應用從項目中由淺入深的學習前言為什么會有大家有沒想過這個問題原因是是弱類型編程語言也就是申明變量類型可以任意變換。是的超集,也相當于預處理器本文通過一個項目來讓你快速上手。 showImg(https://segmentfault.com/img/bVbruJw?w=1024&h=768); 序列文章 從項目中由淺入深的學習vue,微信小程序...
摘要:是事件驅(qū)動的,只根據(jù)用戶的操作做出相應的反應處理。中的數(shù)據(jù)要求帶有明確的類型,不要求。這些小小的變化可能會產(chǎn)生嚴重的意想不到的后果,因此有必要撤銷這些變化。的優(yōu)勢相比于,也有一些明顯優(yōu)勢。因此在應對大型開發(fā)項目時,使用更加合適。 showImg(https://segmentfault.com/img/bV1Dx7?w=740&h=322); TypeScript 和 JavaScri...
摘要:接口前端程序員很難理解的點也是一門面向?qū)ο蟮恼Z言,但是中它是基于原型實現(xiàn)的,中使用了類,這樣會更清晰的體會到面向?qū)ο筮@一說法,但是實際在中的面向?qū)ο蟾油暾?,它跟這些語言一樣,通過接口和類去完整的面向?qū)ο缶幊獭? 從入門到放棄的java 初中時自學過JAVA,學了大概一個多月吧, 學了一個多月,看視頻這些,后面放棄了編程。 依稀記得,那段日子極度苦逼,我想如果當時是學javaScrip...
閱讀 1677·2021-11-12 10:35
閱讀 1618·2021-08-03 14:02
閱讀 2690·2019-08-30 15:55
閱讀 2032·2019-08-30 15:54
閱讀 766·2019-08-30 14:01
閱讀 2431·2019-08-29 17:07
閱讀 2259·2019-08-26 18:37
閱讀 3037·2019-08-26 16:51