zoukankan      html  css  js  c++  java
  • TypeScript学习: 六、TypeScript类的静态属性,静态方法,抽象类

    TypeScript类的静态属性,静态方法,抽象类

       ES5中的静态方法

    function Person() {
    
    }
    // 定义静态方法
    Person.run = function() {
        console.log("我在运动")
    }
    Person.run(); // 调用静态方法

    TypeScript 定义静态方法 使用关键字 static

    class Person{
        public name:string; 
        public age:number;
    
        // 构造函数, 实例化类时触发的方法
        constructor(name:str
    ing, age:number) {
    this.name = name; this.age = age; } // 定义方法 run():void { console.log(this.name + "在运动"); } // 类属性的get,set方法 getName():string{ return this.name; } setName(name:string):void{ this.name = name; } getAge():number{ return this.age; } setAge(age:number):void{ this.age = age; } // 定义静态方法 static print():void { console.log("这个是静态方法"); } } var p = new Person("张三", 20); p.run(); // 实例方法 // 调用静态方法 Person.print(); // 输出: 这个是静态方法

    静态方法,无法使用非静态的属性

     静态属性

    // typeScript 类
    class Person{
        public name:string; 
        public static age:number;
    
        // 构造函数, 实例化类时触发的方法
        constructor(name:string) {
            this.name = name;
        }
        // 定义方法
        run():void {
            console.log(this.name + "在运动");
        }
    
        // 类属性的get,set方法
        getName():string{
            return this.name;
        }
        setName(name:string):void{
            this.name = name;
        }
        // 定义静态方法
        static print():void {
            console.log("这个是静态方法" + this.age);
        }
    }
    
    var p = new Person("张三");
    p.run(); // 实例方法
    
    
    Person.age = 30;// 赋值给静态属性
    Person.print(); // 输出: 这个是静态方法30

    实例化的对象无法调用静态方法和属性

     我们可以这样修改这个实例方法调用静态属性, 通过静态调用方法调用, 这样就不会报错了

    Typescript的多态

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

      继承属于多态的一种

    继承

    class Animal{
        public name:string;
        constructor(name:string) {
            this.name = name;
        }
        play():void{ // 这个方法具体的实现,交给子类去实现,每一个子类的实现都不一样
            console.log("在玩耍");
        }
    }
    class Dog extends Animal{ constructor(name: string){ super(name); }
    // 重写父类方法 play() { return this.name + "在玩小球"; } } class Cat extends Animal{ constructor(name: string){ super(name); } // 重写父类方法 play() { return this.name + "在玩铃铛"; } }

    抽象类和抽象方法

     用abstract关键字定义的抽象类和抽象方法也叫做基类,抽象方法和抽象方法中不包含具体的实现并且必须在派生类中实现。
    通俗的讲就是,父类告诉子类有一个方法, 具体是干什么的, 由子类去实现
     抽象方法只能放在抽象类里面
     抽象类的抽象方法用来定义标准,子类必须继承实现父类
    // 定义抽象类, 定义标准
    abstract class Animal{
        public name:string;
        constructor(name:string) {
            this.name = name;
        }
        abstract eat():any;
    }

    抽象类无法实例化

    子类继承抽象类

    abstract class Animal{
        public name:string;
        constructor(name:string) {
            this.name = name;
        }
        abstract eat():any;
    }
    
    class Dog extends Animal{
        constructor(name:string){
            super(name);
        }
      // 继承抽象类,必须实现抽象类的抽象方法
      eat() { 
        console.log(
    this.name + "在吃东西");
      }
    }

    var d = new Dog("小花花"); d.eat();

    如果子类不去实现父类的抽象方法出现报错

     如果抽象类里面有普通方法, 子类可以不去实现,也可以调用父类的方法,并且子类也可以定义自己的方法

    abstract class Animal{
        public name:string;
        constructor(name:string) {
            this.name = name;
        }
        abstract eat():any;
        run(){
            console.log("抽象类的普通方法内容");
        }
    }
    
    class Dog extends Animal{
        constructor(name:string){
            super(name);
        }
        // 继承抽象类,必须实现抽象类的抽象方法
        eat() {
            console.log(this.name + "在吃东西");
        }
        // 子类自己的方法 
        play(){
            console.log(this.name + "在玩耍");
        }
    }
    
    var d = new Dog("小花花");
    d.eat();
    d.run();
    d.play();
  • 相关阅读:
    55.every,filter,forEach,map,some,reduce,slice
    54.get set
    53.一个挺有意思的api(drag)
    52.var,let,const
    iOS18 程序启动过程
    iOS17 加密
    iOS总结2
    iOS16 常用的正则表达式
    iOS15 UIalertController
    iOS14 UIWebView
  • 原文地址:https://www.cnblogs.com/yangWanSheng/p/15058315.html
Copyright © 2011-2022 走看看