TypeScript学习02-- 面向对象(完结版)
typescript 面向对象
- 1. 接口
- 2. 类
- 2.1 抽象类
- 2.2 访问修饰符
1. 接口
TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
通俗讲,接口就像是一个标准,规范你所定义的类中,应该包含哪些属性和方法,同时也可以当成类声明去使用。
接口中的方法是抽象方法(没有方法体的方法),也只能存放抽象方法
接口可以用来定义一个类的结构,当类继承接口时,类要有接口中的属性,并实现接口中的方法;限制一个实例对象的接口,当实例对象只有包含接口中的属性和方法时,这个对象才是合法的。
语法:
用关键字interface去声明一个接口
用关键字implements实现一个接口
interface 接口名{属性;// 抽象方法,不需实现方法名();
}class 类名 implements 接口名{}
下面用一个例子说明如何一个类如何实现接口,以及当接口成为一种声明类型时,是如何使用的。
// 定义一个接口
interface StudentInterface{name;say(msg:string):void
}
//类对接口实现
class Student implements StudentInterface{name;say(msg:string):void{console.log('我的名字是' + this.name +','+msg);}constructor(name){this.name=name}
}
let student1 = new Student('zhangsan')
student1.say("111")
// 对象对接口的实现:把接口当作类型去声明对象
//字面量形式创建对象,必须拥有接口的属性和方法
let student2:StudentInterface={name:"lisi",say(msg):void{console.log("我的名字是"+this.name+","+msg);}
}
student2.say('你好')
复杂类型的对象实现接口:
//对象接口 创建出来的对象可以使用接口去实现
enum Gender{male1='男',female1='女'
}
class Student1{name:string;age:number;gender:Gender
}
interface PropInterface{//接口中使用了类作为数据类型data:Array<Student1>;visible:boolean
}
let stu:PropInterface={data:[{name:'zhangsan',age:18,gender:Gender.male1},{name:'Mary',age:18,gender:Gender.female1}],visible:false
}
console.log(stu);
既要有接口的属性和方法,也要有继承类的所有属性:
输出结果:
2. 类
传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员来讲就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来的。 从ECMAScript 2015,也就是ECMAScript 6开始,JavaScript程序员将能够使用基于类的面向对象的方式。
类的特性:继承性、多态性
类和类之间通过extends关键字继承
多态性:一个对象可以具有多种形态,例如可以是人也可以是学生或教师。
当子类继承父类时,如果子类的方法名和父类的方法名一致,则会对父类的方法进行重写。
// 类
//es6 类是构造函数的另一种方法
//类是创建对象的模板,一个类可以有多个对象
class Person{name:string;age:number;weight?:numbersay():void{console.log('普通讲话');}
}
class Student1 extends Person{stuNo:string;//重写了类方法say():void{console.log('高端讲话');}study(){console.log('好好学习');}
}
//纯粹面向对象 实例是new出来的的
let s1:Student1= new Student1();
s1.age=1;
s1.name='lisi';
s1.stuNo='1002';
s1.say()
s1.study()
console.log(s1);//字面量模式 类型限制
let s2:Student1={stuNo:'1001',name:'zhangsan',age:12,say():void{console.log('普通讲话');},study():void{console.log('好好学习,天天向上');}
}
2.1 抽象类
什么是抽象类?
抽象类无法创建对象。通常用关键字abstract声明。抽象类中可以有普通方法和抽象方法(没有方法体的方法)。
子类继承抽象类:
方法1.:子类必须实现抽象类中的抽象方法
方法2: 子类也成为抽象类
abstract class Person1{//抽象方法abstract study():void;
}
// 1.子类必须包含抽象类中得抽象方法
class Student3 extends Person1{study(): void {console.log('好好学习,考上了广西科大');};cook():void{console.log('在广西科大,学会了做饭');}
}
let s2:Student3=new Student3();
s2.study();
s2.cook();// 2.子类成为一个抽象类
// abstract class Student1 extends Person{// abstract study(): void;
// }
2.2 访问修饰符
修饰符用于修饰类中的成员属性及成员方法(实例属性、实例方法)
修饰符 | 访问权限 |
---|---|
public | 公开的,当前类、子类、其他类可以访问 |
protected | 受保护,当前类、子类可以访问 |
private | 私有的,仅当前类可以访问 |
readonly | 将当前属性设置为只读的 |
修饰符案例
class Person{public name:string;protected age:number;private weight:number;readonly gender:string;constructor(name,age,weight,gender){this.name=name;this.age=age;this.weight=weight;this.gender=gender}protected foo(){console.log(this.name);console.log(this.age);console.log(this.weight);}
}
class Student extends Person{constructor(name,age,weight,gender){super(name,age,weight,gender)}bar(){super.foo()console.log(this.name);}
}
let stu:Student =new Student('terry',12,40,'male')
console.log(stu.name);
stu.bar()
readonly属性:
class Octopus {readonly name: string;readonly numberOfLegs: number = 8;constructor (theName: string) {this.name = theName;}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // 错误! name 是只读的.
TypeScript学习02-- 面向对象(完结版)相关推荐
- TypeScript 学习一 参数,函数,析构表达式
1,TypeScript是由微软开发的,不过新出的Angular2框架就是谷歌公司由TypeScript语言编写的,所以现在TypeScript是有微软和谷歌一起支持的: 2,TypeScript在j ...
- TypeScript学习文档-基础篇(完结)
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- 最全的TypeScript学习指南
大家好,今天给大家带来 某机构教研总监陆神的开年之作<最全TypeScript学习指南>可以说是非常的细致.全面 TypeScript 是由微软2012年推出的,自由和开源的编程语言.这门 ...
- Java基础02 面向对象
文章目录 01 面向对象基础 1.设计对象并使用 1.1 类和对象 1.2 类的几个补充注意事项 2.封装 2.1 封装的概念 2.2 private关键字 3.this关键字 3.1 就近原则 3. ...
- python学习手册中文版免费下载-Python学习手册 第三版
<Python学习手册(第3版)>讲述了:Python可移植.功能强大.易于使用,是编写独立应用程序和脚本应用程序的理想选择.无论你是刚接触编程或者刚接触Python,通过学习<Py ...
- python学习手册中文版免费下载-Python学习手册(第3版)
<Python学习手册(第3版)>为机械工业出版社出版. 目录 前言 第一部分 使用入门第1章 问答环节 人们为何使用Python 软件质量 开发者效率 Python是"脚本语言 ...
- shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf
shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...
- typescript 接口 java_[Java教程]【TypeScript】TypeScript 学习 2——接口
[Java教程][TypeScript]TypeScript 学习 2--接口 0 2015-06-19 12:00:28 在 TypeScript 中,接口是用作约束作用的,在编译成 JavaScr ...
- python学习中文第五版_前5个学习Python的网站
python学习中文第五版 Python is a multi-utility high-level language (programming as well as a scripting lang ...
最新文章
- linux ps命令大全,Linux ps命令例子汇总
- crt证书linux使用,linux下使用openssl生成https的crt和key证书
- 看问题要看到本质:从Web服务器说起
- One-Dimensional Battle Ships CodeForces - 567D
- 冰与火之歌:「时间」与「空间」复杂度
- 我们的开源项目-2013年度开源社区线下聚会《JEECG微云快速开发平台-SAAS企业应用在线开发与微信移动应用》PPT分享
- 「leetcode」763. 划分字母区间:【记录最远位置与双指针】详解
- 防火墙放开oracle远程,oracleMTS模式下防火墙如何开通
- python中文件写入种类及功能方法
- 鸿蒙天钟壁纸,鸿蒙2.0桌面小工具时钟,日历显示不出来
- 云优cms,云优cms程序系统,云优cms分站系统
- 在Mac上修改jupyter默认地址
- android好玩的app,6款好用又好玩的黑科技APP,第3款居然是蚁帮,凭什么?
- Vue 安装@vue/cli报错npmERR gyp ERR
- 带你理清:ROS机器人导航功能实现、解析、以及参数说明
- python 折线图平滑_使用matplotlib的平滑折线图
- 2021.2.22学习总结
- 【unity】FPS用鼠标控制游戏对象转动
- 基于Huffman编码的C语言解压缩文件程序
- echarts 实现横坐标只显示第一个和最后一个自定义的内容