typescript 类,类的定义、继承、修饰符、抽象类

代码:

// 本节内容
// 1.类的定义
// 2.类的继承
// 3.访问修饰符
// 4.静态属性和静态方法
// 5.抽象类和多态

// js
// function Person(name) {
//     this.name = name;
//     this.print = function() {
//         console.log(this.name)
//     }
// }
// var p = new Person("aa")
// p.print()

// ts 1.类的定义
class Person {
    name:string;
    age:number;
    constructor(name:string, age:number){
        this.name = name;
        this.age = age;
    }
    print() {
        return this.name + ":" + this.age
    }
}
var p = new Person("张三",20)
console.log(p.print())

// 2.类的继承
class Student extends Person {
    cardnumber:string;
    school:string;
    constructor(cardnumber:string, school:string){
        super("zhangsan", 19)
        this.cardnumber = cardnumber;
        this.school = school
    }
    dohomework(){
        return this.name + "今年" + this.age + "岁,就读于" + this.school + "编号" + this.cardnumber
    }
}
// var stu1 = new Student("zhangsan",20)
// stu1.cardnumber = "1001"
// stu1.school = "北京大学"

var stu1 = new Student("1001","北京大学")
console.log(stu1.dohomework())

// 接口的继承
interface Printer {
    getmsg();
}

interface ColorPrinter extends Printer {
    printing();
}

class HPPrinter implements ColorPrinter {
    printing(){
        console.log("打印成功")
    }
    getmsg(){
        console.log("HP10011")
    }
}
var hp = new HPPrinter()
hp.getmsg()
hp.printing()

// 3.访问修饰符
// public / private /protected
class People {
    public name:string;
    private age:number;
    protected email:string;
    constructor(name:string,age:number,email:string){
        this.name = name;
        this.age = age;
        this.email = email;
    }
    print(){
        return this.name + ":" + this.age
    }
}

var p1 = new People("zhangsan",20,"111@qq.com")
console.log(p1.name)
// console.log(p1.age)
// console.log(p1.email)
class Teacher extends People {
    show(){
        console.log(this.name)
        // console.log(this.age)
        console.log(this.email)
    }
}

// 4.静态属性和静态方法
// function Boss() {
//     // 实例属性
//     this.name = "zhangsan";
//     // 实例方法
//     this.print = function(){}
// }
// // 静态属性
// Boss.age = 19
// // 静态方法
// Boss.show = function() {}
// // 调用静态方法
// Boss.show()
// // 调用静态属性
// console.log(Boss.age)
// // 调用实例方法和属性
// var boss = new Boss()
// boss.print()
// console.log(boss.name)

// ts
class Boss {
    // 实例属性
    name:string;
    age:number;
    // 静态属性
    static email:string;
    constructor(name:string,age:number,email:string){
        this.name = name;
        this.age = age;
        Boss.email = email;
    }
    // 实例方法
    print(){
        return this.name + ":" + this.age
    }
    // 静态方法
    static show(){
        console.log("show 方法")
    }
}
// 调用静态方法
Boss.show()
// 嗲用实例方法
var boss = new Boss("zhangsan",22,'111@qq.com')
console.log(boss.print())
// 注:不依赖于类的方法,可以为静态方法

// 5.多态(同一个父类,不同的子类,有不同的实现)
class Animal {
    eat() {
        console.log("animal eat")
    }
}
class Cat extends Animal {
    eat() {
        console.log("猫吃鱼")
    }
}
class Dog extends Animal {
    eat() {
        console.log("狗吃肉")
    }
}
var c = new Cat()
c.eat()
var d = new Dog()
d.eat()

// 6.抽象类/抽象方法
// 6.1 抽象类是提供其他类继承的基类(父类),不能直接被实例
// 6.2 抽象方法只能包含在抽象类中,抽象类中可以包含抽象方法和非抽象方法
// 6.3 子类继承抽象类,实现抽象方法

// 定义抽象类
abstract class Beast {
    // 定义抽象方法(抽象方法没有具体的方法体)
    abstract eat();
    run(){
        console.log("run run run")
    }
}

class Tiger extends Beast {
    eat() {
        console.log("天王盖地虎")
    }
}

var t = new Tiger()
t.eat()

.