TypeScript - 类 - 成员修饰符 public、private、protected 的基本使用

提醒一下

本文的案例较为综合,三个属性糅杂在一起使用的,
所以,阅读的时候需要仔细和认真。

说明

public : 共有的,可以在任何地方被访问到,默认就是public

private : 私有的,只能在声明它的类的内部访问,不可以被继承
            如果就是想使用的话,请使用 【类的存取器 set get 】的方式进行操作。

protected : 受保护的,只能在声明的类中以及子类中进行访问

项目配置

写代码之前,请在项目的【根目录】下创建 tsconfig.json 配置文件,并添加如下属性:
作用解释 : 本案例代码中的属性,未在构造器中初始化,因此,编译的时候会提示异常。
                   此配置就是去掉这个限制,使可以正常编译。
{
    "compilerOptions": {
        // 取消属性的严格初始化限制
      "strictPropertyInitialization": false
    }
  }

代码案例

代码说明:
1.两个类,一个父类,一个子类
2.父类中提供 private 属性的 set、 get,因此外部可以进行私有属性的访问
3.子类中测试使用父类中的 共有属性、受保护属性
// 父类
class Student{
    a:string // 默认属性,public的
    public apublic:string  // public 的属性
    private aprivate:string // private 的属性
    protected aprotected:string // protected 的属性

    // 默认的方法,是public的
    m(){
        console.log('默认方法,public的')
    }
    // public 的方法
    public mPublic(){
        console.log('public的方法')
    }
    // private 的方法
    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()
        // 但是不可以调用父类中的 私有方法,因此下面的是报错的
        // super.mPrivate()
    }

    // 使用protected 的属性
    public useA(){
        this.aprotected = '子类中使用受保护的属性aprotected'
        this.apublic = '子类中使用共有的属性apublice'
    }
   
}

// 定义对象
let xiaoming = new Student()
// 访问 public 的属性和方法,直接访问的方式,没有问题
xiaoming.a = 'a'
xiaoming.apublic = 'apublic'
xiaoming.m()
xiaoming.mPublic()
console.log(xiaoming)
console.log('-----------')

// 访问 private 的属性和方法,必须通过 类的存取器的方式
xiaoming.aPrivateSet = '设置aPrivate的值'
console.log(xiaoming.aPrivateGet)

// 访问 protected 的属性和方法,通过 类的存取器的方式
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

你可能感兴趣的:(TypeScript,typescript,前端,成员属性)