class TestClass {http: Http;constructor(http: Http){this.http = http;}
}

公有,私有于受保护的修饰符

默认为 public

在上面的例子里,我们可以自由访问程序里定义的成员,在TypeScript里,成员默认为public,你也可以明确的将一个成员标记成public

class Animal {public name: string;public constructor(theName: string){this.name = theName;}public move(distanceInMeters: number){console.log(`${this.name} moved ${distanceInMeters}m.`);}
}

还要注意的是,在构造函数的参数上使用public等同于创建了同名的成员变量

class Student {fullName: string;constructor(public firstName, public middleInitial, public lastName) {this.fullName = firstName + " " + middleInitial + " " + lastName;}
}interface Person {firstName: string;lastName: string;
}function greeter(person : Person) {return "Hello, " + person.firstName + " " + person.lastName;
}let user = new Student("Jane", "M.", "User");document.body.innerHTML = greeter(user);

理解private

当成员被标记成private时,它就不能在声明它的类的外部访问:

class Animal {private name: string;constructor(theName: string){this.name = theName;}
}new Animal('Cat').name; // 错误:’name‘是私有的

理解protected

protected修饰符与private修饰符的行为很相似,但有一点不同,protected成员在派生类(子类)中仍然可以访问:

class Person{protected name: string;constructor(name: string){this.name = name;}
}class Employee extends Person{private department: string;constructor(name: string, department: string){super(name)this.department = department;}public getElevatorPitch() {return `Hello, my name is ${this.name} and I work in ${this.department}.`;}
}let howard = new Employe("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // 错误

注意:我们不能在Person类外使用name,但是我们仍然可以通过Employee类的示例方法访问,因为Employee是由Person派生而来

构造函数也可以被标记成 protected。 这意味着这个类不能在包含它的类外被实例化,但是能被继承。比如,

class Person {protected name: string;protected constructor(theName: string) { this.name = theName; }
}// Employee 能够继承 Person
class Employee extends Person {private department: string;constructor(name: string, department: string) {super(name);this.department = department;}public getElevatorPitch() {return `Hello, my name is ${this.name} and I work in ${this.department}.`;}
}let howard = new Employee("Howard", "Sales");
let john = new Person("John"); // 错误: 'Person' 的构造函数是被保护的.

readonly修饰符

你可以使用 readonly关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。

class Octopus {readonly name: string;readonly numberOfLegs: number = 8;constructor (theName: string) {this.name = theName;}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // 错误! name 是只读的.

完整的例子:

class TestClass {constructor(name: string, private address: string, public city){testMethod(){console.log(this.name)// Compiler error: property 'name' does not exist on type 'TestClass'.console.log(this.address);console.log(this.city);}}
}const testClass = new TestClass('Johnson', '8 gaoke road', 'NanNing');
testClass.testMethod();console.log(testClass.name); // Compiler error: property 'name' does not exist on type 'TestClass'.
console.log(testClass.address); // Compiler error: 'address' is private and only accessible within class 'TestClass'.
console.log(testClass.city) // NanNing

总结:
Angular 有些constructor是简写的方式,并没有主体内容,理解背后的原理至关重要。

构造函数必须是public吗_谈谈 constructor 的private和public相关推荐

  1. this调用语句必须是构造函数中的第一个可执行语句_谈谈JavaScript中的函数构造式和new关键字...

    您是否曾困惑于 Javascript 中的new关键字呢?是否曾想理解关于 function 和 constructor 的区别是什么呢? 大多数 Javascript 的新开发者不太想要使用new关 ...

  2. c 与java 反射性能_谈谈Java 反射的快慢

    [相关学习推荐:java基础教程] 反射到底是好是坏 说到Java 中的反射,初学者在刚刚接触到反射的各种高级特性时,往往表示十分兴奋,甚至会在一些不需要使用反射的场景中强行使用反射来「炫技」.而经验 ...

  3. java面向对象_谈谈Java的面向对象

    类的拷贝和构造 C++是默认具有拷贝语义的,对于没有拷贝运算符和拷贝构造函数的类,可以直接进行二进制拷贝,但是Java并不天生支持深拷贝,它的拷贝只是拷贝在堆上的地址,不同的变量引用的是堆上的同一个对 ...

  4. 互联网流量是什么意思_谈谈我理解的流量

    互联网流量是什么意思_谈谈我理解的流量 我们先从标题说起,谈谈我理解的流量.流量前并没有加互联网,也没有加线上.线下,也没有加付费.免费,说明这个是包含所有流量.当然这个不包含手机流量那一类!为什么今 ...

  5. aspect 方法入参 获取_谈谈Spring AOP中@Aspect的高级用法示例

    前言 本文主要跟大家分享介绍了关于Spring AOP中@Aspect的高级用法,下面话不多说了,来随着小编一起看看详细的介绍吧. 1 切点复合运算 支持在切点定义中加入以下运算符进行复合运算: 运算 ...

  6. public、protected、default、private区别

    public.protected.default.private: 修饰符 本类 同包 子类 其他 public √ √ √ √ protected √ √ √ × default √ √ × × p ...

  7. 公钥(Public Key)与私钥(Private Key)

    公钥(Public Key)与私钥(Private Key) 公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部 ...

  8. java class private_Java class 中public、protected 、friendly、private的区别

    转载自:http://hi.baidu.com/ceoct/item/7e136a2417ba6f896f2cc33c Java class 中public.protected .friendly.p ...

  9. 访问权限修饰符( public,protected,default,private )的使用对象和作用域

    使用范围: Java中,外部类的修饰符只能是public或protected(默认)这两种:而类的成员(属性,方法,内部类)的修饰符可以是(public,protected,default,priva ...

最新文章

  1. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...
  2. CentOS系统安装(上):图形/文本界面安装
  3. 2018焦作网络赛-E- Jiu Yuan Wants to Eat
  4. 什么是实例对象python_python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的...
  5. Java并发编程的基础-线程的生命周期
  6. 久玩玉之魂服务器维护,玉之魂1级到57级挂机心得详情分享
  7. php 实现同一个账号同时只能一个人登录
  8. 分析java 线程占用内存_Java线程:保留的内存分析
  9. 操作系统课设之基于信号量机制的并发程序设计
  10. WPF 自定义命令 以及 命令的启用与禁用
  11. 清北考前刷题day6下午好
  12. Linux云用户,Linux 用户与权限
  13. python解密m3u8播放_Python3 通过m3u8连接获取完整媒体文件(附全网视频VIP观看方法)...
  14. Android Studio出现Error:No service of type Factory available in ProjectScopeServices.
  15. 自主知识产权 曙光龙芯3号服务器将面市
  16. Make sure that libnvrtc-builtins.so.11.1 is installed correctly.
  17. Win10系统打开共享文件提示没有权限使用网络资源怎么处理
  18. 05 hex 格式_hex文件格式总结
  19. iOS第三方验证简单接入Game Center
  20. in comment after two dashes (--) next character must be > not (position: START_TAG seen ...

热门文章

  1. Redis 命令行工具有趣的罕见用法
  2. 关于 Oracle 存储双活配置和实战
  3. 教你识别一些sequence的相关问题
  4. COG云原生优化遥感影像,瓦片切分的应用实践
  5. Java之五种遍历Map集合的方式
  6. 一张图看懂华为2019年年报
  7. 【Python成长之路】词云图制作
  8. 【华为云技术分享】CentOS7.4系统下,手动安装MySQL5.7的方法
  9. 【6.19日云享专家技术公开课】从零开始快速搞定扫码付款
  10. php 5.6.29,源码编译安装PHP 5.6.29