`protected` vs `private`

栏目: ASP.NET · 发布时间: 6年前

内容简介:标识为标识为以 TypeScript 为例,比如一个

private

标识为 private 的属性为私有属性,不能在除自己外的地方进行访问。

protected

标识为 protected 的属性为受保护的属性,与私有属性类似,但还可以在继承类中进行访问。

示例

以 TypeScript 为例,比如一个 Base 类,其中包含一个受保护的年龄属性 age ,以及一个私有的工资 _salary 属性。

class Base {
  constructor(protected age: number, private _salary: number) {}
}

同时定义一个 Derived 类继承自 Base 类:

class Derived extends Base {
  constructor(public name: string, age, salary) {
    super(age, salary);
  }
  get Age() {
    // :white_check_mark: 保护的属性可以从继承类中获取到
    return this.age;
  }

  get Salary() {
      // :rotating_light: Property '_salary' is private and only accessible within class 'Base'.ts(2341)
    return this._salary;
  }
}

然后分别实例化这两个类:

const base = new Base(18, 999);
const derived = new Derived("derived", 20, 1000);

然后通过他们的实例尝试访问这些属性。

// :rotating_light:Property '_salary' is private and only accessible within class 'Base'.ts(2341)
console.log(base._salary);

// :rotating_light:Property 'age' is protected and only accessible within class 'Base' and its subclasses.ts(2445)
console.log(base.age);

对于 base ,其两个属性都无法通过实例进行访问。

// :white_check_mark:
console.log(derived.name);

// :rotating_light: 虽然继承类中可以获取到父类的保护属性,但不能通过实例直接进行访问
console.log(derived.age);
// :white_check_mark: 只能在继承类的实例方法中访问,这里 `Age` 是继承类提供的获取器,该方法里访问并返回了父类的保护属性 `age`
console.log(derived.Age);

对于 derived ,其中 name 因为是 public 公有的,所以可通过实例直接访问。

age 继承自父类 Base ,只能在 Derived 类中的实例方法,比如这里定义的 get Age 获取器中进行访问。但无法通过 Derived 的实例直接访问。

Age 在这里为 Derived 类上面的一个获取器,其默认有 public 属性,通过访问它我们间接在类外面访问到了这个在父类中标识为受保护的属性 age


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

IT不再重要

IT不再重要

(美)尼古拉斯·卡尔 / 闫鲜宁 / 中信出版社 / 2008-10 / 29.00元

在这部跨越历史、经济和技术领域的著作中,作者从廉价的电力运营方式对社会变革的深刻影响延伸到互联网对我们生活的这个世界的重构性影响。他批判式的认为,企业想应用网络或应用程序,不再需要自建资料中心、自组IT团队维护和管理系统,因为互联网就像自来水或电力一样,可由专门公司提供服务,你可以付费使用。而如果他的设想真的会实现,我们的世界将会变成什么样子?IT产业的命运又将如何?这又对企业的IT领域投资产生什......一起来看看 《IT不再重要》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具