TypeScript:类的类型变量

class Person { 
    //脱衣服
    private disrobe() {
        //.....
    }
    // 穿衣服
    private dress() {
        //.....
    }
    //洗操
    public takeAbath() {
        this.disrobe();
        console.log("洗澡了");
        this.dress();
    } 
    //睡觉
    public sleep() {
        this.disrobe();
        console.log("睡觉了");
        this.dress();
    }
    public eat() {
        console.log("吃东西了...");
    }
} 

class Boy extends Person {
    static eat() {
        super.eat();
        console.log("别忘记了做好看的吃像...")
    }
    static birth() {
        console.log("生...");
    }
}

 

一、类变量指向该类的对象

类也是一种自定义类型,用于指向该类对象, 类变量也可以赋值为null或undefined

let person1:Person = new Person();
person1.eat(); 
​
let boy1: Boy = new Boy();
boy1.eat();

 

二、父类变量指向子类对象

此处只讲语法, 关于类变量指向子类对象的核心思想,见后面多态相关章节

父类变量可以指向子类对象,指向子类的子类的对象也可以, 比如父类是"人(Person)",子类是"男孩(Boy)",因为男孩本就是人,所以可以用人指向它, 只是男孩对象被人指向后,只把男孩当人看待,不当男孩看待. 以当前示例为例,对于let person2: Person = new Boy();而言。 person2只能访问Person类中的成员,不能访问Boy中的成员

let person2: Person = new Boy();
person2.eat();//执行了父类Person中的eat方法 
person2.sleep();//执行了父类Person中的sleep方法 
// person2.birth();错,因为不能把person2当作Boy看待,所以不能访问Boy中的成员

 

三、类型断言

 

当一个父类类型变量指向子类对象时,可以通过”类型断言“ 把该变量强制转换成子类类型变量

let person: Person = new Boy();
let boy = <Boy>person;//类型断言
//let boy = person as Boy;
boy.sleep();
boy.eat();

 

当父类类型变量指向间接子类对象时,该变量可以类型断言成子类的父类类型,断言成什么类,就只能当作该类的对象访问成员了。

如:

A extends B,   B extends C,  C extends D,  D extends F;
let obj1: F = new A();
let obj2 = <C> obj1;
//obj2可以说部C对象能访问的成员

 

四、Object变量

 

Object是一切类的父类,所以可以指向一切对象。

A extends B,   B extends C,  C extends D,  D extends F;
let obj1:Object = new A();
let obj2 = <C> obj1;
//obj2可以说部C对象能访问的成员

 

 
posted on 2022-09-26 19:51  香香鲲  阅读(36)  评论(0编辑  收藏  举报