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 ...
随机推荐
- ArrayList: java之ArrayList详细介绍(转)
1 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List ...
- postgresql 中文排序
select c_wsxx from fjfl.t_case_anyou order by convert_to(c_wsxx,'GBK') asc;
- java.io.IOException: Input is binary and unsupported
十一月 16, 2019 11:49:47 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() f ...
- jvm面试常见题
背景:jvm相关题目面试必问,后面要深入的进行总结. JVM 面试知识整理 jvm调优命令 调优工具 Minor GC ,Full GC 触发条件 Minor GC触发条件:当Eden区满时,触发Mi ...
- Django ORM 数据库设置和读写分离
一 Django的数据库配置 (一)修改settings.py文件关于数据库的配置: Django默认使用sqlite: DATABASES = { 'default': { 'ENGINE': 'd ...
- 本地mysql启动之后,另外一台电脑利用数据库访问软件,连接问题
背景:在一台电脑上面安装MySQL数据库之后,利用另一台电脑访问本台电脑上面的数据,访问失败的问题 解决方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端 ...
- Alpha版本2发布
0.日常开头 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <https://www.cnblogs.com/harry240/p/11524162.html> 团 ...
- Java开发笔记(一百三十一)Swing的列表框
前面介绍了选择框的用法,当时为了方便用户勾勾点点,无论是复选框还是单选按钮,统统把所有选项都摆在界面上.倘若只有两三个选项还好办,要是选项数量变多比如超过五个,这么多的选择框一齐在界面罗列,不光程序员 ...
- kubernetes 实践一:基本概念和架构
这里记录kubernetes学习和使用过程中的内容. CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3 kubernetes基本概念 kuber ...
- Goroutines和线程对比
目录 栈不同 调度不同 GOMAXPROCS Goroutine没有ID号 栈不同 线程:每一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈,这个栈会用来存储当前正在被调用或挂起(指在调用 ...