首页 > 其他分享 >Ts有趣现象之“初始化时父类中的属性必须在父类构造器中进行,子类操作无效”

Ts有趣现象之“初始化时父类中的属性必须在父类构造器中进行,子类操作无效”

时间:2022-12-16 09:57:18浏览次数:34  
标签:name 子类 age Ts sex Person 时父 Student Sex

先上正确版本

  • 父类Person.ts

    class Person {
        name:string
        age:number
        constructor(name:string,age:number) {
            this.name = name
            this.age = age
        }
    }
    
    export {Person}
    
  • 子类Student.ts

    import Action from "../interfaces/Action";
    import {Person} from "./Person";
    import Sex from "../enums/Sex";
    /*子类Student,继承父类Person*/
    class Student extends Person implements Action{
      readonly sex:Sex
      constructor(name:string,age:number,sex:Sex) {
          super(name,age);
          this.sex = sex
      }
      behavior(): void {
          console.log(`${this.name} ${this.age} ${this.sex.valueOf()}`)
      }
    }
    export default Student
    

再说说错误例子

  • 父类Person.ts

    class Person {
        name:string
        age:number
    }
    
    export {Person}
    
  • 子类Student.ts

    import Action from "../interfaces/Action";
    import {Person} from "./Person";
    import Sex from "../enums/Sex";
    /*子类Student,继承父类Person*/
    class Student extends Person implements Action{
      readonly sex:Sex
      constructor(name:string,age:number,sex:Sex) {
          super();
          this.name = name
          this.age = age
          this.sex = sex
      }
      behavior(): void {
          console.log(`${this.name} ${this.age} ${this.sex.valueOf()}`)
      }
    }
    export default Student
    

有人可能反驳我说,父类中没有定义无参数的constructor,但是我想说,定义了也不好使!请看下面代码,依然是报错不行的!

  • 父类Person.ts

    class Person {
        name:string
        age:number
        constructor() {}
    }
    export {Person}
    
  • 子类Student.ts

    import Action from "../interfaces/Action";
    import {Person} from "./Person";
    import Sex from "../enums/Sex";
    /*子类Student,继承父类Person*/
    class Student extends Person implements Action{
      readonly sex:Sex
      constructor(name:string,age:number,sex:Sex) {
          super();
          this.name = name
          this.age = age
          this.sex = sex
      }
      behavior(): void {
          console.log(`${this.name} ${this.age} ${this.sex.valueOf()}`)
      }
    }
    export default Student
    

所以我得出结论,初始化类实体时,在constructor中仅能对定义在该类的属性初始化
其实,想要在constructor对父类中的属性初始化,也可以用另一种方式——用接口继承类(Java转来的朋友,不要疑惑,Ts是支持接口继承类的),然后用类实现接口,看下面例子

  • 父类Person

    class Person {
        name:string
        age:number
        constructor() {}
    }
    export {Person}
    
  • 接口Action.ts

    import {Person} from "../pojo/Person";
    
    interface Action extends Person{
        behavior():void
    }
    export default Action
    
  • 子类Student.ts

    import Action from "../interfaces/Action";
    import Sex from "../enums/Sex";
    
    class Student implements Action{
        age: number;
        name: string;
        readonly sex:Sex
        constructor(name:string,age:number,sex:Sex) {
            this.name = name
            this.age = age
            this.sex = sex
        }
        behavior(): void {
            console.log(`${this.name} ${this.age} ${this.sex.valueOf()}`)
        }
    }
    export default Student
    

标签:name,子类,age,Ts,sex,Person,时父,Student,Sex
From: https://www.cnblogs.com/JarryShu/p/16986563.html

相关文章

  • Ts有趣现象
    今日学习Ts的接口,我发现了一个有趣的Ts怪像,直接上代码interfaceanimalConstructor{new(name:string,sing:string):animalInterface}interfaceanimalInterface......
  • [LeetCode] 1785. Minimum Elements to Add to Form a Given Sum
    Youaregivenanintegerarray nums andtwointegers limit and goal.Thearray nums hasaninterestingpropertythat abs(nums[i])<=limit.Return the......
  • 网络工具netstat与ss
    建议使用ss命令,2001年的时候netstat1.42版本之后就没更新了,之后取代的工具是ss。netstat命令在很多场景下比较慢。ss可以显示跟netstat类似的信息,但是速度却比netstat快......
  • TS 之 reduce
    一.函数介绍Array.reduce()方法是对数组进行遍历,返回一个计算后的值使用方法:Array.reduce((acc,cur,idx,src)=>{},initialValue)callback回调函数......
  • SOLIDWORKS二次开发插件SolidKits助力企业实现BOM自动化
    对于制造业企业来说,产品设计、结构设计很重要,同样重要的还有物料清单。只有内容全面且准确的BOM表,才能够让采购人员了解到,这批产品中我需要购买哪些零部件,购买的数量是多少......
  • TIL:Git Squash Commits
    背景比如开发某个feature,可能需要好几天,但是每天都需要提交代码(只是假设)那commit的粒度如何控制,可以看看这个讨论:https://www.v2ex.com/t/623219可是每天提交的信息好......
  • 15 个很棒的 Bootstrap UI 界面编辑器
    [导读]​​BootstrapMagic​​​​BootSwatchr​​​​BootstrapLiveEditor​​​​FancyBoot​​ ​​StyleBootstrap​​​​Lavish​​​​BootstrapThemeRol......
  • LTspice: Copy and Paste Between Schematics
    不得不说LTSpice真的是界面方面太不Friendly了,这个问题让我抓狂了一下午,不过最终还是再官网找到了答案关键的诀窍就是copy后不要点击左键然后直接点击另外一个原理图窗口......
  • bootstrap页面标题缩略图
    关于作者:郑云飞,程序员Java(web前端,web后端,oracle数据库ormysql数据库)本文主要来讲解以下内容:1.大屏幕介绍;2.页面标题;3.缩略图;4.警示框;5.Well;6.总结。大屏幕介绍轻量,灵活的......
  • bootstrap导航条
    关于作者:郑云飞,程序员Java(web前端,web后端,oracle数据库ormysql数据库)艺名:天放本文主要来讲解以下内容:1.默认的导航条;2.表单;3.按钮;4.文本;5.非导航的链接;6.组件对齐;7.固定在......