zoukankan      html  css  js  c++  java
  • class

    最简单的类

    class Person {
        name: string //定义实例属性
        age: number = 20 // 定义实例属性并且赋值
        constructor(name: string) {
          this.name = name //实例属性赋值
        }
        run(): void {
          console.log(this.name + 'is running');
        }
        getName(): string {
          return this.name;
        }
        setName(name: string): void {
          this.name = name;
        }
      }

    类继承extends|super

    子类自动继承父类的所有实例属性和方法
    父子都有的方法:子类只会调用自己的方法
    子有父没有的方法:父亲不能子类扩展出来的方法
     
    这里说明一下子类重写父类的方法细节:子类重写父类的方法的参数的个数和类型必须和父类保持一摸一样,当父类返回值类型是void,子类可以自定义返回值类型。一旦父类有规定的返回值类型。子类也必须是同样的返回值类型
    其实也就是一句话:子类方法参数和返回值类型要包含(>=)父类方法的类型。但是参数数量要和父类保持一致性。
    class Person {
        name: string
        age: number
        constructor(name: string, age: number) {
          this.name = name;
          this.age = age
        }
        showInfo(): void {
          console.log(this.name + this.age + '---');
    
        }
      }
      class Student extends Person {
        gender: string
        // 如果子类不需要扩展自己的实例属性比如(gender)constructor构造函数可以省略不写,默认就继承了父类的实例属性和方法
        constructor(name: string, age: number, gender: string) {
          super(name, age)
          this.gender = gender
        }
        showInfo() {
          console.log(this.name + this.age + this.gender);
        }
        sayHi(): void {
          console.log('hi');
    
        }
    
      }
      const s = new Student('zs', 10, 'male')
      const p=new Person('zs',30)
      s.showInfo() //s是子类实例 子类有showInfo就去调用子类自己的
      // p.sayHi() 父类是不能调用子类的实例方法

     多态

    实现多态的关键:子类继承并且重写父类的方法 并且父类型的引用指向子类型的对象
     //  实现多态的关键:子类继承并且重写父类的方法 并且父类型的引用指向子类型的对象
        let sam: Animal = new Snake("Sammy the Python");
        sam.move() //注意 父子类都有move方法 但是是调用子类的move方法
        
        let tom: Animal = new Horse("Tommy the Palomino")
        tom.move() //注意父子类都有move方法 是调用子类的move方法
    
        interface IAnimal {
          (animal: Animal): void
        }
        let move: IAnimal = animal => {
          animal.move()
        }
        sam.move()

     属性方式符

      属性修饰符:可以修饰实例属性|方法 静态属性|方法
       public:默认 当前类和子类和当前类实例和子类实例(实例也叫外部)都可以访问
       protected:当前类和子类可以访问。当前类实例对象和子类实例对象都不能访问
       private:只能在当前类种访问。不能再当前类实例和子类和子类实例对象访问
       readonly
     

    静态属性和方法

     静态属性和方法
       这些属性存在于类本身上面而不是类的实例上.换言之 静态属性、方法属于当前类,而不属于实例对象
       静态方法的this是当前类本身。实例不能调用静态方法
       静态属性和方法也是可以用关键字public|protected|private修饰的。于是也可以继承的
     /**/
      class Person {
        name: string;
    
        age: number
        constructor(name: string, age: number) {
          this.name = name
          this.age = age
    
        }
        public static sex: string = '' //public可以省略
        public static print(): void {
          // console.log(this); //this=Person this是当前类对象
          // console.log(this.age);  访问不到实例对象属性
          console.log(Person.sex);
    
    
        }
        run(): void { //实例方法
          console.log(`${this.name} is run`);
        }
    
      }
      class Student extends Person {
    
      }
      const p = new Person('zs', 10)
      Person.print() //当前类.静态方法
      const s = new Student('lisi', 20)
      Student.print() //子类.静态方法。前提是父类print方法用public修饰
      console.log(Student.sex);

    抽象类

    抽象类和抽象方法用来定义标准的。抽象类作为其他派生类的基类使用,用abstract修饰。不能直接被实例化。
    抽象方法必须定义在抽象类中,不能具体的实现且必须在派生类中实现,可以用属性修饰符修饰public|protected|private
      abstract class Animal {
        abstract makeSound(): void
        move(): void { //抽象类里面也可以定义实例方法 这个实例方法可以被子类继承调用
          console.log('moving');
    
        }
      }
      class Dog extends Animal {
        makeSound(): string { // 子类必须实现抽象类方法,且不能改变抽象方法的入参
          return '100'
        }
      }
      const dog: Dog = new Dog();
      dog.move()
      dog.makeSound()
  • 相关阅读:
    实验十二:面向对象基础 5、构造方法、重载
    实验十一:面向对象基础 3、类、对象、方法实训
    实验十:程序结构与数组 8、数组实训
    实验九:程序结构与数组 6、方法实训
    课后作业:情境三:程序结构与数组 5、方法
    Java获取随机数
    实验八:程序结构与数组 4、循环实训
    情境三:程序结构与数组 4、循环实训
    ES查询优化
    ES配置搜索规则
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14950647.html
Copyright © 2011-2022 走看看