//类的定义
class Animal{
id:string;//默认访问修饰符为 public : 类本身、子类、类外部可访问
public name:string; // public : 类本身、子类、类外部可访问
protected type:string = '动物'; // 保护成员 protected, 类本身、子类可访问, 类外部不可访问
private color:string; // 私有成员 private: 类本身访问, 子类、类外部不可访问 //构造函数
constructor(id:string, name:string,color:string){
this.id = id;
this.name = name;
this.color = color;
} //实例方法
run(){
console.log(`${this.name}(编号为:${this.id})在跑步`);
}
} //类的继承:继承关键字 extends
class Dog extends Animal{
constructor(id:string, name:string, color:'白色'){
super(id, name,color);//调用父类的构造函数
} getDogInfo(){
this.type = '小狗';
//console.log(`品种:${this.type}; 名字:${this.name}; 颜色:${this.color}`); // this.color 报错,原因是color在父类中是私有成员,只能在父类中访问,所以报错
console.log(`品种:${this.type}; 名字:${this.name}; `);
}
} let xioahong = new Dog('0001', '小白', '白色');
xioahong.run(); // 输出 小白(编号为:0001)在跑步
xioahong.getDogInfo(); //输出 品种:小狗; 名字:小白; //类修饰符
//public : 公共属性,本类、子类、类外部均可访问
//protected: 保护成员,本类、子类中可访问,类外部不可访问
//private: 私有成员, 本类中可以访问,子类、类外部不可访问 //类中的静态属性、静态方法
class Cat {
name:string = '小花猫';
static tizhong:number = 12;
static eat(){
console.log(`${this.name}的体重为${Cat.tizhong}斤`);
}
}
Cat.tizhong = 49; //调用静态属性
Cat.eat(); // 调用静态方法, 输出: Cat的体重为49斤
/**
* 解析:
* 这里本来预期的输出应该是: 小花猫的体重为49斤, 但是 最终静态方法中无法获取到name属性的值
* 静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存
* 非静态方法是属于对象的,对象是在类加载之后创建的
* 静态方法先于对象存在,所以如果静态方法调用非静态方法的话,可能会报空指针异常。
* 因此: 静态方法不能直接访问非静态属性,但是可以直接访问静态属性,访问方法为: [类名].[属性]
* **/ //抽象类: /**
* 抽象的关键字: abstract
* 抽象类是为其他类提供继承的基类,是给其他类定义的标准。
* 抽象类不能直接被实例化
* 抽象类必须包含至少一个抽象方法
* 抽象方法的声明不包含具体的实现
*/
abstract class Person {
abstract run():void;
abstract getInfo():string;
} //let p = new Person(); // 报错, 抽象类不能直接被实例化 /**
* 继承抽象类:
* 在这里 Gril 为派生类, Person 为基类
* 派生类必须实现基类中的抽象方法
*/
class Gril extends Person{
name:string;
constructor(name:string){
super();
this.name = name;
} //这里实现了Person类中的抽象方法 run()
run(){
console.log(`${this.name}在跑步`)
} //这里实现了Person类中的抽象方法 getInfo()
getInfo(): string {
return this.name;
}
} let xiaohong = new Gril('小红');
xiaohong.run(); // 输出:小红在跑步
console.log(xiaohong.getInfo()); //输出 小红 //多态
// 万物皆对象,任何对象都会有不同的形态,这叫多态,比如 树叶是一个对象,但是树叶有不同的形状,这就是多态,又比如,都是动物,但是动物又分很多种,这就是多态
// 在代码中,多态其实就是继承,提供一个基类给多个对象继承 /**
* 声明一个基类, 植物
*/
class Botany {
name:string;
constructor(name:string){
this.name = name;
}
GrowUp(){
console.log(`我是${this.name},我正在茁壮成长`);
}
} /**
* 仙人掌是一种植物,继承 植物 这个对象
*/
class Cactus extends Botany{
thorn:string = '尖尖';
constructor(name:string){
super(name)
}
growsThorns():void{
console.log(`我是一颗${this.name},我身上会长很多${this.thorn}的刺`);
}
} /**
* 百合花是一种植物,继承 植物 这个对象
*/
class Lily extends Botany{
leaf:string = '绿色';
constructor(name:string){
super(name)
}
growsLeaf():void{
console.log(`我是一颗${this.name},我身上会长很多${this.leaf}的叶子`);
}
} //实例化一个仙人掌对象
let cactus = new Cactus('仙人掌');
cactus.GrowUp(); // 输出: 我是仙人掌,我正在茁壮成长
cactus.growsThorns(); // 输出: 我是一颗仙人掌,我身上会长很多尖尖的刺 //实例化一个玫瑰花的对象
let lily = new Lily('百合花');
lily.GrowUp(); // 输出: 我是百合花,我正在茁壮成长
lily.growsLeaf(); // 输出: 我是一颗百合花,我身上会长很多绿色的叶子

typescript_类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. SpringBoot使用jasypt加解密密码

    在我们的服务中不可避免的需要使用到一些秘钥(数据库.redis等) 开发和测试环境还好,但生产如果采用明文配置讲会有安全问题,jasypt是一个通用的加解密库,我们可以使用它. <depende ...

  2. # advanced packaging

    目录 advanced packaging ASM NEXX ASMPT完成收購NEXX 準備就緒迎接先進半導體封裝之高速增長 Intro Bumping 产品供应 晶圆溅镀– Apollo 300 ...

  3. python基于redis实现分布式锁

    阅读目录 什么事分布式锁 基于redis实现分布式锁 一.什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无 ...

  4. Qt编写气体安全管理系统29-跨平台

    一.前言 Qt的跨平台特性是非常厉害的,本来作为C++来说,跨平台的特性比JAVA还要好,只不过学习难度更大,所以大家更理解的跨平台是JAVA,Qt的跨平台特性是我见过的所有开发环境和语言中最厉害的, ...

  5. [LeetCode] 407. Trapping Rain Water II 收集雨水 II

    Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...

  6. 画图前端:mermaid。时序图/类图/甘特图/流程图/状态图/饼图。类似工具:Typora

    文档 https://mermaidjs.github.io/#/ cdn https://www.bootcdn.cn/mermaid/ 在线编辑 https://mermaidjs.github. ...

  7. SQL server触发器学习记录

    作为C#程序员,我工作内容基本就是winform,wpf,asp.net.sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫... 需求描述:as ...

  8. harbor的安装和简单使用【h】

    安装docker的私有仓库, 利用vmware提供的harbor工具, 参考Docker 私有仓库方案比较与搭建, Harbor安装 -- 企业级Registry仓库 2.2harborProject ...

  9. python json模块(15)

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级.跨平台.跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示 ...

  10. Coursera,Udacity,Edx 课程列表(更新ing)

    Coursera,Udacity,Edx 课程列表(更新ing) Coursera有很多特别好的课程,平时没有机会听到国外大牛的课程,通过Coursera算是可以弥补一下吧,国外的课程普遍比国内的老师 ...