目录
类类型变量
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对象能访问的成员