typescript_类
//类的定义
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_类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
随机推荐
- springboot自动装配redis在pool下偶尔出现连接异常的问题
jedis pool的配置其实是采用 org.apache.commons.pool2.impl.GenericObjectPoolConfig类的配置项. jedis 2.9版本代码如下: pack ...
- Buffon投针问题
- 搭建EOS全节点并接入主网
#EOS编译安装 #!/bin/bash #install.eos.sh #EOS 安装 #从github克隆主网代码 cd /opt git clone https://github.com/EOS ...
- 日志分类以及TFIDF
TF的概念是Term Frequent,是一个单词出现的频率,是一个局部概念,就是这个单词在指定文件中出现的频率,公式如下: 但是呢,这个TF其实很没有说服力,比如the,a之类的频率很高,但是其实不 ...
- PAT 甲级 1078 Hashing (25 分)(简单,平方二次探测)
1078 Hashing (25 分) The task of this problem is simple: insert a sequence of distinct positive int ...
- MUD游戏开发教程视频
MUD游戏开发教程视频 https://space.bilibili.com/476328540/channel/detail?cid=91187
- flex布局大全
有句话叫做:存在即是合理. 最近很喜欢flex布局模式,不过还在摸索中,这里正一边在项目中使用和总结,也在学习一些大牛们总结的东西和布局思考. 鉴于自己很苦恼,到处去ha资料,真的,就没有一个系统的, ...
- [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...
- HSRP 实验
一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1.理解HSRP的工作原理. 2.掌握HSRP配置方法. 3.理解HSRP的抢占与跟踪作用. 实验拓扑: 实验过程 ...
- c++ std::cout重定向到文件
cout默认是与监视器(屏幕)相连,cout出来的内容会输出到屏幕上,通常是会在命令行窗口之中.但有时,我们希望将cout出来的具体日志.错误信息写到某个文件之中,而屏幕上仅仅显示出当前进行的任务,以 ...