当前位置: 首页 > news >正文

TypeScript 类中提供的 public、private 和 protected 修饰符的作用理解

把类想象成一栋三层小楼:

  1. public(客厅)
    谁都能进来,想坐坐沙发、看看电视都行。
    默认不加修饰符就是 public。

    class House {public tv = '大彩电';   // 外面随便用
    }
    const h = new House();
    console.log(h.tv);        // 大彩电
    
  2. private(保险箱)
    只有屋主自己能开,连亲儿子都碰不到。

    class House {private safe = '金条';
    }
    const h = new House();
    console.log(h.safe);      // ❌ 编译报错:外人看不见
    
  3. protected(父母卧室)
    外人不能进,但儿子可以进来拿东西。

    class House {protected bedroom = '爸妈的床';
    }class Son extends House {show() {console.log(this.bedroom); // ✅ 儿子能进}
    }const h = new House();
    console.log(h.bedroom);        // ❌ 外人不行
    

一句话总结:

  • public:随便看随便摸(默认)。
  • private:只有类自己能摸。
  • protected:自己和“孩子”能摸,外人不行。

提醒一下:
protected 并不是“只能”在子类里用,而是“子类也能用,外人不能用”。

  • 在父类内部:照样可以访问自己的 protected 成员。
  • 在子类内部:也可以访问继承来的 protected 成员。
  • 在类外面(任何实例或其它类):统统不能碰。

举个完整例子:

class Animal {protected leg: number = 4;   // 父类自己能用walk() {console.log(`我用 ${this.leg} 条腿走路`); // ✅ 父类内部 OK}
}class Dog extends Animal {bark() {console.log(`我有 ${this.leg} 条腿,汪!`); // ✅ 子类内部 OK}
}const a = new Animal();
const d = new Dog();console.log(a.leg); // ❌ 报错:类外禁止
console.log(d.leg); // ❌ 报错:类外禁止

所以:
protected 并不局限于子类,而是“类自己 + 子类”都能访问,类外一律禁止。

一句话区分protected和private:
private 是“私房钱”,除了自己谁都不能看;
protected 是“传家宝”,自己和孩子能看,外人不行。

场景privateprotected
本类内部✅ 可以访问✅ 可以访问
子类内部❌ 不能访问✅ 可以访问
类的外面(实例、其他类)❌ 不能访问❌ 不能访问

快速代码对比:

class Parent {private secret = '私房钱';protected heirloom = '传家宝';
}class Child extends Parent {show() {console.log(this.secret);   // ❌ 报错:私房钱孩子不能碰console.log(this.heirloom); // ✅ OK:传家宝孩子可以继承}
}const p = new Parent();
console.log(p.secret);   // ❌ 外人不能看
console.log(p.heirloom); // ❌ 外人也不能看

总结:

  • 想彻底隐藏 → 用 private
  • 允许子类继承使用 → 用 protected
http://www.dtcms.com/a/346496.html

相关文章:

  • C++程序嵌入python脚本调试
  • 搜索算法在实际场景中的应用
  • 系统思考:突破复杂困境
  • Python 十进制转二进制
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)(含Java实现代码)
  • GIS实现综合应急管理平台及应用
  • Linux系统 --- 指令
  • CMake link_directories()详细介绍与使用指南
  • 算法题(188):团伙
  • 【0基础PS】蒙版与剪贴蒙版详解
  • `strchr` 字符串查找函数
  • 信息结构统一论:物理世界与人类感知、认知及符号系统的桥梁
  • 嵌入式-时钟树和时钟树编程-Day20
  • 大宗商品、股票指数及ETF期权五档买卖分时tick级历史交易数据深度解析
  • zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS
  • 2025最新版mgg格式转MP3,mflac转mp3,mgg格式如何转mp3?
  • FastText 词向量全景指南(没那么全)
  • 【论文】Zotero文献管理
  • [e3nn] docs | 不可约表示(Irreps)
  • AI 大模型 “进化史”:从参数竞赛到场景落地,技术突破藏着哪些逻辑?
  • C#_异步编程范式
  • kvcache比赛记录
  • JavaScript Object 操作方法及 API
  • GEO优化专家孟庆涛发布:《GEO内容优化的四大黄金标准》
  • 20250822 组题总结
  • 车辆方向数据集 - 物体检测
  • 深度学习:入门简介
  • 本地部署DeepSeek实战
  • 工作后的总结和反思1
  • Huggingface入门实践 Audio-NLP 语音-文字模型调用(一)