zoukankan      html  css  js  c++  java
  • 4、typescript中的类

    /**
     * 1、类的定义
     * 2、继承
     * 3、类里面的修饰符
     * 4、静态属性 静态方法
     * 5、继承多态、抽象类、抽线方法
    */
    1、ts中定义类
    es5:
    function Person(nanme){
        this.name = name;
        this.run = function(){
            console.log(this.name)
        }
    }
    var p = new Person('张三');
    p.run()
    typescript:
    class Person{
        name:string;    //属性  前面省略了public关键词
        constructor(n:string){  //构造函数  实例化类的时候出发的方法
            this.name = n;
        }
        run():void{
            alert(this.name+'在做运动');
        }
    }
    var p = new Person("张三");
    p.run();
    typescript给类中添加方法:
    class Person{
        name:string;
        constructor(name:string){
            this.name = name;
        }
        getName():string{//定义方法取值
            return this.name;
        }
        setName(name:string):void{//方法传值 改变属性
            this.name = name;
        }
    }
    var p = new Person("张三");
    alert(p.getName());
    p.setName('李四');
    alert(p.getName()); 
    2、ts中实现继承 extends super
    class Person{
        name:string;
        constructor(name:string){
            this.name = name;
        }
        run():string{
            return `${this.name}在运动`
        }
    }
    var p = new Person('王五');
    alert(p.run())
    
    class Web extends Person{
        constructor(name:string){
            super(name);//初始化父类的构造函数
        }
    }
    var w = new Web('李四');
    alert(w.run())
    // ts中继承的探讨 父类的方法和字类的方法一致
    class Person{
        name:string;
        constructor(name:string){
            this.name = name;
        }
        run():string{
            return `${this.name}在跑步`
        }
    }
    class Web extends Person{//继承父类的属性和方法
        constructor(name:string){
            super(name);//初始化父类的构造函数
        }
        // 现在字类里面找 再去父类里面找
        run():string{
            return `${this.name}在跑步-字类`
        }
        // 还能扩展自己的方法
        work(){
            alert(`${this.name}在工作`)
        }
    }
    var w = new Web('李四');
    w.work();
    w.run();
    

      先在子类里面找 再去父类里面找

    3、类里面的修饰符

    typescript里面定义属性的时候给我们提供了三种修饰符
    /*
        public:共有    在类里面、字类、类外面都可以访问
        protected:保护类型 在类里面、字类里面可以访问,在类外部没法访问
        private:私有   在类里面可以访问、字类和类外部没法访问
     注:
        属性如果不加修饰符 默认时public
    */
    class Person{
        public name:string;
        constructor(name:string){
            this.name = name;
        }
        run():string{
            return `${this.name}在运动`
        }
    }
    
    class Web extends Person{
        constructor(name:string){
            super(name);//初始化父类的构造函数
        }
        // 还能扩展自己的方法
        work(){
            alert(`${this.name}在工作`)
        }
    }
    // public
    var w = new Web('王五');//public name:string;
    w.work();
    
    // protected
    var w = new Web('李四111');//protected name:string;
    alert(w.work());//李四111在工作 在字类中可以访问
    alert(w.run());//李四111在运动  在父类中可以访问
    var p = new Person('哈哈哈');alert(p.name)//p.name可以编译 但是会报错,控制台上也有提醒,name是保护类型。
    
    // private
    

    4、静态属性 静态方法

    es5静态方法和属性
    function Person(){
        this.run1=function(){
    
        }
    }
    Person.name='哈哈哈';//静态属性
    Person.run2=function(){//静态方法
    
    }
    var p=new Person();
    Person.run2();//静态方法的调用
    
    $('#box').css('color','red');
    function $(ele){
        return new Base(ele);
    }
    function Base(ele){
        this.ele = 获取dom节点;
        this.css=function(arr,val){//实例方法
            this.ele.style.arr = val;
        }
    }
    // 静态方法调用
    $.get('url',function(){
    
    })
    // 定义静态方法
    $.get=function(){
    
    }
    

     ts中的静态方法和属性

    class Person {
        name:string;
        static age:number=20;//静态属性
        constructor(name:string) {
            this.name = name;
        }
        run(){//实例方法
            alert(`${this.name}在运动`)
        }
        work(){//实例方法
            alert(`${this.name}在共工作`)
        }
        static print(){//静态方法
            // 没法直接调用类里面的属性
            alert('静态方法'+this.name);
            // 需要定义静态属性才能访问Person.age
            alert('静态方法'+Person.age);
        }
    }
    Person.print();//静态方法调用
    alert(Person.age);//静态属性调用
    

    5、多态;抽象方法 抽象类

    //父类定义一个方法不去实现,让继承他的字类去实现,每一个字类有不同的表现。
    //多态属于继承
    class Animal {
        name:string;
        constructor(name:string) {
            this.name = name;
        }
        eat(){//具体吃什么不知道,具体吃什么?继承他的子类去实现,每个字类的表现不一样。
            console.log('吃的方法');
        }
    }
    
    class dog extends Animal {
        constructor(name:string) {
            super(name);
        }
        eat(){
            return this.name+'吃粮食';
        }
    }
    class cat extends Animal {
        constructor(name:string) {
            super(name);
        }
        eat(){
            return this.name+'吃老鼠';
        }
    }
    
    抽象方法 抽象类
    typeScript中的抽象类:他是提供其他类继承的基类,不能直接被实例化。
    var a =new Animal();//无法创建抽象类的实例
    用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且在派生类中实现。
    class Animal {  //抽象方法只能放在抽象类中
      abstract eat():any;
     }
    
    // 抽象类和抽象方法来定义标准
    // Animal这个类要求其他的字类必须包含eat方法
    // 抽象方法实现多态
    abstract class Animal {
        name:string;
        constructor(name:string){
            this.name = name;
        }
        abstract eat():any;//抽象类中的抽象方法不包含具体实现并且在派生类中实现。
        run(){
            console.log('其他方法可以不实现');
        }
    }
    //var a =new Animal();//错误写法 无法创建抽象类的实例
    
    class Dog extends Animal {
        constructor(name:any){
            super(name);
        }
        // 抽象类的子类必须实现抽象类里面的抽象方法
        eat(){
            console.log(this.name + '吃粮食')
        }
    }
    var d=new Dog('小黑');
    d.eat();
    
    class Cat extends Animal {
        constructor(name:any){
            super(name);
        }
        // 抽象类的子类必须实现抽象类里面的抽象方法
        eat(){
            console.log(this.name + '吃老鼠')
        }
    }
    var c=new Cat('小花猫');
    c.eat();
    

      

     

  • 相关阅读:
    Python3全栈学习目录
    五句话搞定javavscript作用域
    Python线程池
    luogu4016 负载平衡问题
    luogu2756 飞行员配对方案问题
    luogu1251 餐巾计划问题
    luogu3386 【模板】二分图匹配 匈牙利算法 hdu2063 过山车 dinic
    luogu3381 【模板】最小费用最大流
    luogu3376 【模板】网络最大流 dinic
    luogu2740 [USACO4.2]草地排水Drainage Ditches 最大流EK
  • 原文地址:https://www.cnblogs.com/wenshaochang123/p/13413596.html
Copyright © 2011-2022 走看看