提醒一下
本文的案例较为综合,三个属性糅杂在一起使用的,
所以,阅读的时候需要仔细和认真。
说明
public : 共有的,可以在任何地方被访问到,默认就是public
private : 私有的,只能在声明它的类的内部访问,不可以被继承
如果就是想使用的话,请使用 【类的存取器 set get 】的方式进行操作。
protected : 受保护的,只能在声明的类中以及子类中进行访问
项目配置
写代码之前,请在项目的【根目录】下创建 tsconfig.json 配置文件,并添加如下属性:
作用解释 : 本案例代码中的属性,未在构造器中初始化,因此,编译的时候会提示异常。
此配置就是去掉这个限制,使可以正常编译。
{
"compilerOptions": {
// 取消属性的严格初始化限制
"strictPropertyInitialization": false
}
}
代码案例
代码说明:
1.两个类,一个父类,一个子类
2.父类中提供 private 属性的 set、 get,因此外部可以进行私有属性的访问
3.子类中测试使用父类中的 共有属性、受保护属性
class Student{
a:string
public apublic:string
private aprivate:string
protected aprotected:string
m(){
console.log('默认方法,public的')
}
public mPublic(){
console.log('public的方法')
}
private mPrivate(){
console.log('private的方法')
}
protected mProtected(){
console.log('protected的方法')
}
set aPrivateSet(str:string){
this.aprivate = str
}
get aPrivateGet():string{
return this.aprivate
}
set aProtectedSet(str:string){
this.aprotected = str
}
get aProtectedGet():string{
return this.aprotected
}
}
class SmallStudent extends Student{
smallM(){
super.m();
super.mPublic();
super.mProtected()
}
public useA(){
this.aprotected = '子类中使用受保护的属性aprotected'
this.apublic = '子类中使用共有的属性apublice'
}
}
let xiaoming = new Student()
xiaoming.a = 'a'
xiaoming.apublic = 'apublic'
xiaoming.m()
xiaoming.mPublic()
console.log(xiaoming)
console.log('-----------')
xiaoming.aPrivateSet = '设置aPrivate的值'
console.log(xiaoming.aPrivateGet)
xiaoming.aProtectedSet = '设置aProtected 的值'
console.log(xiaoming.aProtectedGet)
console.log('--------下面是子类的操作---------')
let mingming = new SmallStudent()
mingming.smallM()
mingming.a = '子类访问父类的public属性a'
mingming.apublic = '子类访问父类的public属性apublic'
mingming.useA();
console.log(mingming.aProtectedGet)
console.log(mingming.apublic)
运行结果:
默认方法,public的
public的方法
Student { a: 'a', apublic: 'apublic' }
-----------
设置aPrivate的值
设置aProtected 的值
--------下面是子类的操作---------
默认方法,public的
public的方法
protected的方法
子类中使用受保护的属性aprotected
子类中使用共有的属性apublice