给前端介绍对象啦!(TypeScript版)(二)

2020 年 1 月 07 日

给前端介绍对象啦!(TypeScript版)(二)

OOP 三大特征


封装:你办事,我放心。我不知道你内部如何运作。


类是属性和方法的集合,封装就是对外暴露可操作的属性和方法,隐藏其他实现细节。属性描述同一类事物的特征,方法描述同一类事物的操作。例如:下面 Animal 类,对外暴露可读写的 name/age/totalNum 成员属性和可调用的 eat()/sleep()/say()成员方法。后面还有一些例子中 private 属性和方法,是不对外暴露的隐藏属性和方法。


抽象类含有未实现的抽象方法,等待子类去实现,所以不能实例化。例如:抽象类 Animal 含有未实现的抽象方法 say(),。


静态属性和静态方法是类所有,并不是每个对象所有,是全局性的属性和方法。例如:静态成员变量 totalNum 是类所有,记录已实例化动物总数。


(温馨提示:左右滑动可查看全部代码)


//抽象类


abstract class Animal {       public static totalNum = 0;   //静态成员       constructor(public name: string, public age: number) {//转化为成员变量语法糖               Animal.totalNum++;       };       public eat() {               console.log("I am eating someting");       }       public sleep() {               console.log("I am sleeping");       }       public abstract say();}
复制代码


测试用例:


(温馨提示:左右滑动可查看全部代码)


// let animal: Animal = new Animal(“Error”,10);//编译报错:无法创建抽象类。


继承:龙生龙,凤生凤,老鼠的儿子会打洞


子类继承了父类所有的属性和方法,并可以拥有自己新的属性和方法。继承解决了代码重用的问题。例如:Dog 类继承了 Animal 类,拥有了 Animal 类所有的属性和方法 name//age/sleep()/eat() /say()。并且可以覆盖和扩展,eat() /say()覆盖了父类的方法实现, wagtail()是扩展出父类没有的新方法。


private/protected/public 关键字,限定了对外可见范围。private 只能在类内部访问;protected 只能在类和子类内部访问;默认 public,在类内部外部都能访问。


(温馨提示:左右滑动可查看全部代码)


class Dog extends Animal {       private shoutNum: number = 3;       public eat() {//多态 覆盖原方法               console.log("I am eating meat");       }       private getShoutSting(): string{               let shoutString: string='';               for(let i=0;i<this.shoutNum;i++){                       shoutString+="Wong!";               }               return shoutString;       }       public say() {               console.log(this.getShoutSting());       }       public wagTail() {//扩展新方法               //...       }}
复制代码


测试用例:


(温馨提示:左右滑动可查看全部代码)


let myDog: Animal = new Dog("DaHuang", 5);      myDog.sleep();//I am sleeping      myDog.eat();//I am eating meat      myDog.say(); //Wong!Wong!Wong!      // myDog.getShoutSting();//编译错误
复制代码


本转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/CXaasAzRMk3mD_waWv8DHQ


2020 年 1 月 07 日 15:3964

评论

发布
暂无评论
发现更多内容

解析 HashMap 源码概括

shengjk1

Java hashmap

区块链技术--公证人机制

CECBC区块链专委会

区块链 数字货币 公证人

全面了解CGI、FastCGI、PHP-FPM

书旅

CGI PHP-FPM Fast-CGI

Spring如何选择类构造器

申屠鹏会

golang 翻译

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

Bash 脚本的单元测试

柴锋

bash Linux DevOps Unit Test Shell

结算场景下的跳坑记

墨凡

这些年看过的Linux相关书籍推荐

我是程序员小贱

翻译: Effective Go (7)

申屠鹏会

golang 翻译

1 时间复杂度总结

我是程序员小贱

1 学习性能优化的要点

我是程序员小贱

这样看mybatis,谁都会分析源码!

诸葛小猿

源码 mybatis mybatis源码

目前数字人民币试点仍是“4+1” 别误读了

CECBC区块链专委会

数字货币 央行 人民币

一次由默认参数引起的思考

Lart

编程 思考

让你起飞的20个Linux命令骚操作

我是程序员小贱

学习技术先从学会使用搜索引擎开始

我是程序员小贱

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

航运区块链 抗疫危中有机

CECBC区块链专委会

区块链 航运

16张图入门Nginx——(前端够用,运维入门)

执鸢者

nginx 运维 前端

平均负载是什么?

我是程序员小贱

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

MySQL 基准测试

多选参数

MySQL

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

正则表达式位置匹配——匹配两个特殊符号中间的内容

jerry.mei

Java 正则表达式 前端 字符串匹配

JDK中居然也有反模式接口常量

看山

Java 源码阅读

螺旋矩阵算法,臭代码解析,微服务架构 Service Mesh 服务网格 RPC 协议实现原理 Dubbo 通讯协议,John 易筋 ARTS 打卡 Week 13

John(易筋)

ARTS 打卡计划

spark学习之IDEA配置spark并wordcount提交集群

我是程序员小贱

给前端介绍对象啦!(TypeScript版)(二)-InfoQ