定义类

class Person {
name: string; //属性
constructor(_name: string) {
this.name = _name;
} //构造函数
sayHello(): string {
return "Hi,everyone"
} //方法
} let firstOne = new Person("Fred") //实例化类

继承:继承使用关键字extends,调用父类使用super,子类继承父类的属性和方法,并且子类可以改写父类的属性和方法

class Animal {
name: string;
constructor(_name: string) {
this.name = _name;
}
skinColour(color: string = "black"): void {
console.log(`${this.name} skin colour is ${color}`)
}
} class Horse extends Animal {
constructor(name: string) { super(name) }
skinColour(color: string = "brown"): void {
console.log(`I'am ${this.name}`);
super.skinColour("brown");
}
} let horse = new Horse("horse");
horse.skinColour()
// I'am horse
// horse skin colour is brown

public、private、protected、readonly

  • public(不声明默认都为public,也可以显示的设置为public)

    class Person {
    public name: string; //属性
    public constructor(_name: string) {
    this.name = _name;
    } //构造函数
    public sayHello(): string {
    return "Hi,everyone"
    } //方法
    } let firstOne = new Person("Fred") //实例化类
  • private(private的成员不能被外部访问;比较带有privateprotected成员的类型时,两个类型兼容的条件是private或protected的成员必须相同切来至同一个声明(同一个类))
    class Person {
    private name: string;
    public constructor(_name: string) {
    this.name = _name;
    }
    } class Employee {
    private name: string;
    public constructor(_name: string) {
    this.name = _name;
    }
    } let firstOne = new Person("Fred")
    console.log(firstOne.name) //error: Property 'name' is private;
    let lastOne = new Employee("Fred")
    firstOne = lastOne // error: Type 'Employee' is not assignable to type 'Person'.Types have separate declarations of a private property 'name'.
  • protected(protected和private相似,但protected成员可以在派生类中访问(能被继承,但不能在实例中访问,若构造函数是protected,则不能被实例化,只能被继承))
    class Person {
    protected name: string;
    protected constructor(_name: string) {
    this.name = _name;
    }
    } class Employee extends Person {
    private department: string;
    public constructor(name: string,department:string) {
    super(name);
    this.department = department;
    }
    } let Bob = new Person; //error: Constructor of class 'Person' is protected
    let fred = new Employee("fred","test");
    console.log(fred.name) //error: Property 'name' is protected
  • readonly(设置属性为只读,必须在声明时或构造函数里初始化)
    class Person {
    readonly name: string;
    constructor(_name: string) {
    this.name = _name;
    }
    } let fred = new Person("fred");
    fred.name = "Bob" //error: Cannot assign to 'name' because it is a constant or a read-only property.

    参数属性(参数属性通过给构造函数参数添加一个访问限定符来声明(public,private,protected),把声明和赋值合并至一处)

    class Person {
    constructor(private name: string) { }
    sayHello(): void {
    console.log(`my name is ${this.name}`)
    }
    } let fred = new Person("fred");
    fred.sayHello() //my name is fred

    存取器(get、set   只带有 get不带有set的存取器自动被推断为readonly

    let passcode = "secret passcode";
    
    class Employee {
    private _fullName: string; get fullName(): string {
    return this._fullName;
    } set fullName(newName: string) {
    if (passcode && passcode == "secret passcode") {
    this._fullName = newName;
    }
    else {
    console.log("Error: Unauthorized update of employee!");
    }
    }
    } let employee = new Employee();
    employee.fullName = "Bob Smith";
    if (employee.fullName) {
    console.log(employee.fullName);
    }

    静态属性(static,不能被实例访问,在类里面访问时,需要加上类名)

    class Person {
    static height:number = ;
    constructor(private name: string) { }
    sayHello(): void {
    console.log(`my name is ${this.name}, I height is ${Person.height}`)
    }
    } let fred = new Person("fred");
    fred.sayHello() //my name is fred, I height is 180

    抽象类(abstract,抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化。抽象类中的抽象方法不包含具体实现并且必须在派生类中实现)

    abstract class Person {
    constructor(public name: string) { }
    abstract sayHello():void;
    } class Empoloy extends Person{
    constructor(){
    super("Fred")
    }
    sayHello(){
    console.log(`my name is ${this.name}`)
    }
    } let firstOne = new Empoloy();
    firstOne.sayHello(); //my name is Fred

ts中类的继承的更多相关文章

  1. python中类的继承

    python中类的继承 在python中面向对象编程中实现继承,以下面一个实例进行说明. class SchoolMenber(): # __init__类似于c++中的构造函数 # __init__ ...

  2. Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

    (一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...

  3. typescript中类的继承

    typescript中类的继承用到的是:extends和super 先看一下typescript中类的写法: class Demo{ //类的属性 name:string; age:number; / ...

  4. Java中类的继承深入剖析

    在Java开发中,我们常常用到继承这一概念,可以说继承是Java这类面向对象编程语言的基石.正是有了继承这个概念,使得我们可以创建分等级层次的类.今天小编就和大家一起来深入聊聊Java语言的继承. 在 ...

  5. 《挑战30天C++入门极限》图例实解:C++中类的继承特性

        图例实解:C++中类的继承特性 整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中 ...

  6. PHP中类的继承与方法重写

    php中类的继承与方法重写,欢迎大神补充指点! <?php namespace _1009; class Demo5 { //实例属性 public $product; public $pric ...

  7. Python中类的继承代码实例

    Python中类的继承代码实例 这篇文章主要介绍了Python中类的继承代码实例,本文直接给出代码及运行效果,需要的朋友可以参考下 相对于C 的继承编写,Python更简洁,而且效率也是很高的,下面编 ...

  8. 第7.6节 Python中类的继承机制详述

    在本章第一节,介绍了面向对象程序设计的三个特征:封装.继承和多态,前面章节重点介绍了封装和多态,由于Python语言是多态语言,对象的类型不再由继承等方式决定,而由实际运行时所表现出的具体行为来决定, ...

  9. Typescript 中类的继承

    Typescript中类的定义与继承与后端开发语言java/C#等非常像,实现起来非常方便,而且代码便于阅读. 用Typescript写较大项目时是非常有优势的. /** * BaseClass */ ...

随机推荐

  1. EF6 mysql配置

    如何把一个ef项目 从sqlserver改为mysql 首先在引入了ef的层再引入这两个包,注意两个的版本一定要一样,一定要一样,一定要一样,不然就会报错 MySql.Data.Entity目前的最新 ...

  2. HTML学习笔记之基本介绍

    超文本标记语言 (Hyper Text Markup Language,HTML)不是一种编程语言,而是一种标记语言,用一套标记标签描述网页 HTML 标记标签又被称为 HTML 标签(HTML Ta ...

  3. 15.id生成的两种方式

  4. 【codeforces 793B】Igor and his way to work

    [题目链接]:http://codeforces.com/contest/793/problem/B [题意] 给一个n*m大小的方格; 有一些方格可以走,一些不能走; 然后问你从起点到终点,能不能在 ...

  5. RabbitMQ学习总结(1)——基础概念详细介绍

    一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...

  6. Co-prime

    Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. SIM卡中UCS2编码的三种格式(80,81,82)分析

    网上看到一篇比较好的说ucs2编码的文章,保存一下,原文地址: http://hi.baidu.com/youren4548/blog/item/fa08bd1bf61005058618bf1d.ht ...

  8. 小记——Grub Rescue恢复

    下面我要讲的是一个悲伤的故事 引子 电脑状况简介:两块硬盘(1HHD.1SSD),SSD上装了LINUX(40G)+WIN10(50G)的双系统,SSD剩余部分在WIN下使用装程序,HHD做仓库.LI ...

  9. codevs——T1043 方格取数

    http://codevs.cn/problem/1043/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  10. POJ 2486

    因为苹果可能在不同的子树中,所以,很容易想到设状态dp_back[i][j]为以i点为树根走j步并回到i点的最大苹果数与dp_to[i][j]不回到i点的两个状态. 于是,转移方程就很明显了.只是注意 ...