//类的定义
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. Xamarin图表开发基础教程(8)OxyPlot框架

    Xamarin图表开发基础教程(8)OxyPlot框架 [示例OxyPlotFormsDemo]在Xamarin.Forms中实现线图的显示. (1)打开Xamarin.Forms项目. (2)将Ox ...

  2. [转]CSS3 使用 calc() 计算高度 vh px

    1.px 像素,我们在网页布局中一般都是用px. 2.百分比 百分比一般宽泛的讲是相对于父元素,自适应网页布局越来越多,百分比也经常用到了. 3.Viewport    viewport:可视窗口,也 ...

  3. 【winform】主窗体多线程给子窗体传值

    1.主窗体多线程给子窗体传值 解决方案:主要使用委托,因为会出现跨线程错误 主窗体 public FormMain() { InitializeComponent(); //background th ...

  4. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  5. springboot 整合Elasticsearch

    Elasticsearch Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,可用于实现全文搜索和实时数据统计. 在 ...

  6. Android 调试桥介绍 (adb)

    Android 调试桥 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试 ...

  7. javascript中this、new、apply和call详解

    如果在javascript语言里没有通过new(包括对象字面量定义).call和apply改变函数的this指针,函数的this指针都是指向window的,重要的话要说三遍.... 讲解this指针的 ...

  8. 【tensorflow基础】ubuntu-tensorflow可视化工具tensorboard-No dashboards are active for the current data set.

    前言 今天基于tensorflow训练一个检测模型,本应看到训练曲线的,却只见到一个文件events.out.tfevents.1570520647.hostname,后来发现这个文件可以查看训练曲线 ...

  9. [LeetCode] 666. Path Sum IV 二叉树的路径和 IV

    If the depth of a tree is smaller than 5, then this tree can be represented by a list of three-digit ...

  10. 第I位是0/1

    int a; scanf("%d",&a); ;i<;i++) { ;//从右往左第i位是x ,i==0,就是第一位 printf("%d ",x ...