一、static

静态方法或静态属性,通过类名去调用。是整个类的公有属性或公有方法。不是某一个对象的单一属性。

  1. class Girl{
  2. public static sex:string = "女"
  3. private name:string;
  4. private age:number;
  5. static sayName():void{
  6. console.log(Girl.sex);
  7. }
  8. constructor(name:string,age:number){
  9. this.name = name;
  10. this.age = age;
  11. }
  12. }
  13. var g:Girl = new Girl("jiangwei",18);
  14. console.log(Girl.sex);

当我们需要在一个类(class)中定义一个属性为公共的属性,就好比说我们需要这个属性是所有类都是共有的,并且这个属性的值是同一个

static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。

二、抽象类

用abstract关键字定义抽象类和抽象方法。抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。

Tip:抽象类无法被直接实例化。

abstract class Animal{
    abstract eat():void;
}
class Dog extends Animal{
    eat(): void {
        console.log("吃骨头")
    }
}
class Cat extends Animal{
    eat(): void {
        console.log("吃鱼")
    }

}

三、多态

父类定义一个方法不去实现,子类继承父类去实现这个方法,调用的时候有不同的表现。

abstract class Animal{
    abstract eat():any;
}
class Dog extends Animal{
    eat(): void {
        console.log("吃骨头")
    }
}
class Cat extends Animal{
    eat(): void {
        console.log("吃鱼")
    }

}
class Girl{
    call(s:Animal):void{
        s.eat();
    }
}
var jiang:Girl = new Girl();
var dog:Animal = new Dog();
var cat:Animal = new Cat();
jiang.call(dog);
jiang.call(cat);