typescript(6)中的类 静态属性 静态方法 抽象类 多态

【4】静态方法

 class Person{
     name:string;
     constructor(name:string){
         this.name = name;
     }
     getName():string{
         return `获取到的名字是:${this.name}`;
     }
     static stac(){//创建静态方法
         return `这是一个静态方法`;
     }
 }
//var p = new Person('jack');
//console.log(p.getName());
console.log(Person.stac());//静态方法的调用 Person.stac()

问题:静态方法可以直接获取类里面的属性吗?

class Person{
     name:string;
     age:number=18;
     constructor(name:string){
         this.name = name;
         
     }
     getName():string{
         return `获取到的名字是:${this.name}`;
     }
     static stac(){//创建静态方法
         return `这是一个静态方法+${this.age}`;//这是一个静态方法+undefined  获取到类里面的属性是undefined
        //静态方法, 里面没法直接调用类里面的属性
        }
 }
// var p = new Person('jack');
// console.log(p.getName());
console.log(Person.stac());//静态方法的调用 Person.stac()

答案是静态方法里面试没法直接调用类里面的属性的

问题: 那静态方法里怎么可以获取到类里面的属性呢???
答:将属性设置为静态 static

请看代码

class Person {
    static age:number=12;
    static getAge(){
        return `下面来获取下这个人的年纪是:${this.age}`
    }
}
console.log(Person.age);
console.log(Person.getAge());

【5】多态:父类定义一个方法不去实现,让继承它的子类实现 每一个子类有不同的表现

class Anmial{
     food:string;
     constructor(name:string){
         this.food = name;
     }
     eat(){//具体吃什么不知道 ,具体吃什? 谁继承它的子类去实现 ,每一个子类的表现不一样
         console.log('吃东西');
     }
 }
 class Dog extends Anmial{
     constructor(food:string){
         super(food);
     }
     eat(){
         return `小狗在吃${this.food}`;
     }
 }
 var d = new Dog('骨头');
 console.log(d.eat());
 
 class Cat extends Anmial{
    constructor(food:string){
        super(food)
    }
    eat(){
         return `小猫在吃${this.food}`;
     }
 }
 var cat = new Cat('鱼');
 console.log(cat.eat());

【6】抽象类
typescript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化。
用abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
abstract 抽象方法只能放在抽象类里面
抽象类和抽象方法用来定义标准,标准:Animal 这个类要求它的子类必须包含eat方法。

abstract class Anmial{
    name:string;
    constructor(name:string){
        this.name = name;
    }
    abstract eat():any;
    // abstract eat(){
        
    // }
}
//var a = new Anmial();//这样写是错误的,typescript 中的抽象类:它是提供其他类继承的基类,不能直接被实例化。
class Dog extends Anmial{
    constructor(name:string){
        super(name);
    }
    eat(){//必须在子类里写eat的实现方法
        console.log(`${this.name}在吃骨头`);
    }
}
class Cat extends Anmial{//必须在子类里写eat的实现方法
    constructor(name:string){
        super(name);
    }
    eat(){
        console.log(`${this.name}在吃鱼`);
    }
}
var d = new Dog('小狗1');
d.eat();
var ca = new Cat('小猫1');
ca.eat();

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值