范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

TypeScript,面向对象,类构造函数继承抽象类接口和封装

  面向对象
  面向对象,Object Oriented,软件开发方法,一种编程范式。
  面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
  面向对象的三大特性:封装、继承、多态。
  TypeScript面向对象,类 (class)
  1、static关键字,表示一个静态属性,通过类访问。
  2、readonly关键字,表示一个只读属性,不能修改属性,构造函数可初始化。
  构造函数和this关键字
  1、constructor函数,称为构造函数,对象创建时调用。
  2、在实例方法中,this就表示当前当前的实例。
  继承(extends)和super关键字
  1、子类写了constructor构造函数必须使用super继承父类constructor构造函数的属性
  2、通过继承可以将多个类中共有的代码写在一个父类中,继承后子类将会拥有父类所有的方法和属性。
  3、方法重写,子类中添加了和父类相同的方法,子类方法会覆盖掉父类的方法
  抽象(abstract)
  1、以abstract开头的类是抽象类,抽象类不能实例化,事专门用来被继承的类。
  2、抽象类中可以添加抽象方法,非抽象类中不可以有抽象方法。
  3、抽象方法使用abstract开头,没有方法体,只能定义在抽象类中,子类必须对抽象方法进行重写。
  接口(interface)
  1、接口的作用类似于抽象类,不同点在于接口中的所有函数和属性都是没有实值的,接口中的所有方法都是抽象方法。
  2、接口主要负责定义一个类的结构,限制一个对象的接口,对象只有包含接口中定义的所有属性和方法时才能匹配接口。
  3、一个类去实现接口,实现接口时类中要包括接口中的所有属性。
  封装和属性的封装
  1、private修饰符,私有的属性,私有属性只能在类内部进行访问修改。
  2、protected修饰符,受保护的属性,只能在当前类和当前类的子类中访问。
  3、public修饰符,共有的属性,修饰的属性可以再任意位置访问修改默认值。
  4、getter方法用来读取属性。
  5、setter方法迎来设置属性。
  6、getter和setter被统一称为属性的存储器,定义时在方法之前添加get和set,调用的时候直接通过点语法调用。代码案例
  案例1: class MyUser {     static desc: string = "用户类"; // 使用static开头的属性是静态属性(类属性),可以直接通过类去访问     readonly id: number = 1000004; // readonly开头的属性表示一个只读的属性无法修改     name: string = "张三";     age: number = 28;     toString() {         return "id=" + this.id + ",name=" + this.name + ",age=" + this.age;     } } let myUser = new MyUser(); console.log("myUser=", myUser); // myUser= MyUser { id: 1000004, name: "张三", age: 28 } console.log("myUser.desc=", MyUser.desc); // myUser.desc= 用户类
  案例2: class MyUser2 {      readonly id: number;     name: string;     age: number;      /**      * 构造函数和this      * @param id       * @param name       * @param age       */     constructor(id: number, name: string, age: number) {         this.id = id;         this.name = name;         this.age = age;     }      toString() {         return "id=" + this.id + ",name=" + this.name + ",age=" + this.age;     } }  let myUser2 = new MyUser2(1000001, "孔子", 2000); console.log("myUser2=", myUser2); // myUser2= MyUser2 { id: 1000001, name: "孔子", age: 2000 }
  案例3: (     function () {         /**          * 以abstract开头的类是抽象类,抽象类和其他类区别不大,不能用来创建对象          * 抽象类就是专门用来被继承的类          * 抽象类中可以添加抽象方法          */         abstract class MyUser3 {              readonly id: number;             name: string;             age: number;              /**              * 构造函数和this              * @param id               * @param name               * @param age               */             constructor(id: number, name: string, age: number) {                 this.id = id;                 this.name = name;                 this.age = age;             }              toString() {                 return "id=" + this.id + ",name=" + this.name + ",age=" + this.age;             }              /**              * 抽象方法使用 abstract开头,没有方法体              * 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写              */             abstract work():void ;         }          class MyEmployee extends MyUser3 {              /**              * 构造函数              * @param id               * @param name               * @param age               */             constructor(id: number, name: string, age: number) {                 super(id, name, age);             }              work() {                 console.log("雇员,id=" + this.id + ",name=" + this.name + "在工作");             }         }          class MyManager extends MyUser3 {             work() {                 console.log("经理,id=" + this.id + ",name=" + this.name + "在工作");             }         }          let myEmployee = new MyEmployee(1, "沙僧", 501);         // myEmployee= MyEmployee { id: 1, name: "沙僧", age: 501 }         console.log("myEmployee=", myEmployee);         myEmployee.work();         // 雇员,id=1,name=沙僧在工作          let myManager = new MyManager(1, "唐僧", 500);         // myManager= MyManager { id: 1, name: "唐僧", age: 500 }         console.log("myManager=", myManager);         myManager.work();         // 经理,id=1,name=唐僧在工作      } )();
  案例4: interface MyWorker{     work():void; }  class MyUser4 implements MyWorker {        readonly id: number = 1000004; // readonly开头的属性表示一个只读的属性无法修改     name: string = "张三";     age: number = 28;     toString() {         return "id=" + this.id + ",name=" + this.name + ",age=" + this.age;     }     work() {         console.log("用户,id=" + this.id + ",name=" + this.name + "在工作");     } } let myUser4 = new MyUser4(); // myUser4= MyUser4 { id: 1000004, name: "张三", age: 28 } console.log("myUser4=", myUser4);  myUser4.work(); //用户,id=1000004,name=张三在工作
  案例5: (function () {     // 定义一个表示人的类     class Person {         // TS可以在属性前添加属性的修饰符         /*         *   public,修饰的属性可以在任意位置访问(修改) 默认值         *   private,私有属性,私有属性只能在类内部进行访问(修改)         *         - 通过在类中添加方法使得私有属性可以被外部访问         *   protected 受包含的属性,只能在当前类和当前类的子类中访问(修改)         *         * */         private _name: string;         private _age: number;          /**          * 构造函数          *           * @param name           * @param age           */         constructor(name: string, age: number) {             this._name = name;             this._age = age;         }          /*         *   getter方法用来读取属性         *   setter方法用来设置属性         *       - 它们被称为属性的存取器         * */         // TS中设置getter方法的方式         get name() {             // console.log("get name()执行了!!");             return this._name;         }         set name(value) {             this._name = value;         }         get age() {             return this._age;         }         set age(value) {             if (value >= 0) {                 this._age = value             }         }     }      const person = new Person("孙悟空", 18);     /*     * 现在属性是在对象中设置的,属性可以任意的被修改,     *   属性可以任意被修改将会导致对象中的数据变得非常不安全     * */     // person.setName("猪八戒");     // person.setAge(33);     person.name = "猪八戒";     person.age = 33;     console.log(person);      class A {         //protected是保护的属性,只能在当前类和子类中设置         //protected只能在当前类和当前类的子类中设置         protected num: number;         constructor(num: number) {             this.num = num;         }     }     class B extends A {         test() {             console.log(this.num);         }     }     const b = new B(123456789);     // b.num = 33; // 属性"num"受保护,只能在类"A"及其子类中访问。      class C1 {          name: string;         age: number          // 可以直接将属性定义在构造函数中         constructor(name: string, age: number) {             this.name = name;             this.age = age;         }     }     const c1 = new C1("沙僧", 111222333);     console.log(c1);     // C1 { name: "沙僧", age: 111222333 }      class C2 {         // 直接将属性定义在构造函数中         constructor(public name: string, public age: number) {         }     }     const c2 = new C2("沙僧", 111222333);     console.log(c2);     // C2 { name: "沙僧", age: 111222333 }  })();

依米康实现扭亏为盈股权激励聚焦主业助力高质量发展10月25日晚间,依米康(证券代码300249。SZ)发布2021年三季度报告,19月实现营业收入9。7亿元,同比增长4。23实现归母净利润3,124。53万元,同比增长148。0国民技术整体经营逐渐改善2021H1主要业务呈良好增长态势8月27日晚,国民技术(300077。SZ)发布了2021年半年度报告。报告显示,上半年国民技术实现营业收入2。81亿元,同比增长66。12实现归属于上市公司股东的净利润4314。广弘控股全产业链上下游一体化协同发展,有望开启全新成长空间10月29日晚间,广弘控股(000529。SZ)发布2021年三季度报告,报告显示,2021年前三季度公司实现营业收入约23。19亿元,同比增加3。78归属于上市公司股东的净利润盈喷子狂喷人工智能机器人抢饭碗人工智能机器人将代替大量重复简单的工作岗位,免不了大量劳动密集型产业工人失业。肯定就有大量杠精喷子跳出来说,封杀人工智能,人工智能机器人会抢我饭碗。现好多自动化养鸡场,养猪场,养牛如何才能让家人远离油烟危害?云米AI烟灶套装给出完美答案云米大家每次品尝美味佳肴的时候,是否意识到家人在烹饪时其实冒着很大的健康风险?根据相关机构研究发现,厨房是家庭中空气污染最严重的空间,其污染源除了炊火源中释放的有害气体,还有烹饪菜荣耀magic3和vivox60Pro价格差不多,买哪款好?按照目前的市场行情来看,这两款手机的售价是差不多的,只是他们的内存配置不一样。那么问题来了,如何从这两款手机中选择一款手机进行购买呢?关于这个问题,小芳建议大家还是要将自身的需求以内核动力燃起助推松井股份三条战舰加速掘金涂料蓝海随着国货崛起国潮兴起的呼声渐高,我国各个行业都在提倡国产化替代,其中也包括新型功能涂层材料这个常见重要却又不引人关注的领域。功能性涂层材料广泛应用于制造业的诸多细分领域,在全球消费卫光生物上半年实现营收3。36亿元卫光生命科学园价值持续绽放8月19日晚,卫光生物(002880。SZ)发布2021年上半年业绩报告。期内,公司实现营业收入3。36亿元,实现归属于上市公司股东的净利润6,996。00万元,公司经营状况基本稳万达电影半年报特许经营影院新开17家5家机构维持买入推荐评级继横店影视和金逸影视后,8月30日晚间,院线龙头万达电影(002739。SZ)如期发布2021年中期报告。与此前预告的业绩区间一致,上半年,万达电影实现营业收入70。34亿元,同比依靠科技创新推动产业互联网发展,瑞茂通上半年营收净利双增长2021年上半年,受全球经济复苏货币宽松以及双碳目标影响,大宗商品价格不断上涨,在这一背景下,旺盛的市场需求,活跃的交易情况,为大宗商品供应链企业的经营提供了良好的经营环境。8月2净利润同期增长233。18!这家企业MCU业务交出亮眼成绩单从物联网的感知层传输层平台层到应用层,MCU的身影几乎无处不在。国民技术产品规划与管理部执行总监钟新利根据ICInsights的数据显示,全球MCU(微控制单元)产品出货量从201
二人世界新玩法!4K高清画质,沉浸式氛围,90后新婚巴适现在越来越多的90后新生家庭都有自己的想法,打造一个多功能的智慧家庭,成为年轻新婚一族的向往。激光电视作为新兴的科技潮品,慢慢走进年轻人的视野。在家里也能享受到影院级4K画质的沉浸用了环保建材,甲醛就不会超标吗?你以为自己用了高端环保建材,新房装修后甲醛就不会超标吗?听完我的分析再下结论。选购建材的时候,你会发现,各大品牌都会标明甲醛达标,那是啊,不达标就不能卖了嘛那这些建材真的达标吗??我们到底需要什么样的居家环境?原来是有标准可以量化的我们总是说要高品质的居家环境,可是有个特别拷问灵魂的问题到底高品质的居家环境是啥样的?有没有一个可以量化可衡量的标准?感官标准从感觉上来判断,现代家庭舒适环境标准,起码要达到五恒,恒洁与网易家居携手推出质美中国一起探寻未来人居更多可能随着科技的不断进步,以及社会的不断发展,智能生活开始被越来越多的人所接受,人们对其的需求也越来越大。为了更好的探索智能与设计,探寻未来人居的更多可能,恒洁与网易家居携手推出了质美中独爱这份可爱,我的爱车比亚迪E1比亚迪E1一经面世,就凭借其可爱小巧的车身,及非凡的产品力,获得了不少消费者的认可与选择,那么它到底好在哪里,来看看这位车主怎么说。俗话说得好人靠衣装马靠鞍,二十一世纪那就是看脸的可可爱爱,比亚迪e1比亚迪e1,太q了,连我这个直男也被它迷惑到了。你有没有呢?听听车主怎么说,看看e1到底有什么过人之处!对于选车我想很多小伙伴都和我一样,不知该如何下手,不知该如何选择,这些都是我太可爱了!努比亚65W氮化镓充电器套装,真正的旅充一说到旅行,你脑海中除了美丽的风景诱人的美食独特的风土人情还有什么呢?是不是还有各种电子设备的充电器。今天我再给大家带来一款非常棒的,真正意义上的旅行充电器,折叠插脚多口快充哪个都怎么实现一个最小栈?实现一个栈,该栈带有出栈(pop)入栈(push)取最小元素(getMin)3个方法。要保证这3个方法的时间复杂度都是O(1)。如果用一个变量m保存栈的最小值,我们模拟一下入栈1入球迷们听好了!教你独赏世界杯的正确打开方式世界杯倒计时对于许多球迷而言,现在已经是可以按秒来算计了吧?世界杯一来,什么101,什么街舞团,什么奔跑吧统统给我靠边站,一箱啤酒,一拨基友,一台电视,才是我等球迷向往的生活!不过性能进阶京爆新品日首选华硕灵耀X系列轻薄本近日,华硕新品发布会上发布了多款新品,如天选2游戏本天选air创作本等,还有华硕旗下的灵耀X系列高端商务本,其中包括耀X纵横3。3K触控全面屏轻薄本灵耀X逍遥4KOLED触控翻转轻有一天,你可能会为当时的不舍得而买单大家好,我是老李。相信看到标题的时候,一定有不少朋友要吐槽老李是不是今天又要灌毒鸡汤了。其实并不是,只是正好看到一则广告文案,有感而发。当年嫌贵舍不得买空调,结果几年后熬不住,还是