在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
//类的定义 class Animal{ id:string;//默认访问修饰符为 public : 类本身、子类、类外部可访问 public name:string; // public : 类本身、子类、类外部可访问 protected type:string = '动物'; // 保护成员 protected, 类本身、子类可访问, 类外部不可访问 private color:string; // 私有成员 private: 类本身访问, 子类、类外部不可访问 //构造函数 constructor(id:string, name:string,color:string){ this.id = id; this.name = name; this.color = color; } //实例方法 run(){ console.log(`${this.name}(编号为:${this.id})在跑步`); } } //类的继承:继承关键字 extends class Dog extends Animal{ constructor(id:string, name:string, color:'白色'){ super(id, name,color);//调用父类的构造函数 } getDogInfo(){ this.type = '小狗'; //console.log(`品种:${this.type}; 名字:${this.name}; 颜色:${this.color}`); // this.color 报错,原因是color在父类中是私有成员,只能在父类中访问,所以报错 console.log(`品种:${this.type}; 名字:${this.name}; `); } } let xioahong = new Dog('0001', '小白', '白色'); xioahong.run(); // 输出 小白(编号为:0001)在跑步 xioahong.getDogInfo(); //输出 品种:小狗; 名字:小白; //类修饰符 //public : 公共属性,本类、子类、类外部均可访问 //protected: 保护成员,本类、子类中可访问,类外部不可访问 //private: 私有成员, 本类中可以访问,子类、类外部不可访问 //类中的静态属性、静态方法 class Cat { name:string = '小花猫'; static tizhong:number = 12; static eat(){ console.log(`${this.name}的体重为${Cat.tizhong}斤`); } } Cat.tizhong = 49; //调用静态属性 Cat.eat(); // 调用静态方法, 输出: Cat的体重为49斤 /** * 解析: * 这里本来预期的输出应该是: 小花猫的体重为49斤, 但是 最终静态方法中无法获取到name属性的值 * 静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存 * 非静态方法是属于对象的,对象是在类加载之后创建的 * 静态方法先于对象存在,所以如果静态方法调用非静态方法的话,可能会报空指针异常。 * 因此: 静态方法不能直接访问非静态属性,但是可以直接访问静态属性,访问方法为: [类名].[属性] * **/ //抽象类: /**
|
请发表评论