📜  JS++ |访问修饰符和“超级”(1)

📅  最后修改于: 2023-12-03 15:02:25.673000             🧑  作者: Mango

JS++ | 访问修饰符和“超级”

简介

在JS++中,访问修饰符允许程序员在定义类和成员时控制其他对象对其的访问能力。通过使用访问修饰符,程序员可以限制特定成员的访问权限,提高代码的安全性和可维护性。

此外,JS++还引入了"超级"关键字,用于在子类中访问父类的成员。这样可以方便地重用父类实现,并在子类中进行扩展。

本文将详细介绍JS++中的访问修饰符和"超级"关键字的使用。

访问修饰符

JS++中有三种访问修饰符:公共(public)、私有(private)和受保护(protected)。

公共(public)

公共成员可以被类的实例和外部访问。在定义类成员时,默认情况下,成员是公共的,可以省略"public"关键字。

class MyClass {
  public myPublicMember: number;

  constructor(public myPublicParameter: number) {
    this.myPublicMember = myPublicParameter;
  }
}

const myObject = new MyClass(10);
console.log(myObject.myPublicMember); // 输出: 10
console.log(myObject.myPublicParameter); // 输出: 10

注意,JS++中的默认访问修饰符是"公共",与许多其他编程语言不同。

私有(private)

私有成员只能被定义它们的类访问。这意味着无法从类的外部或子类中访问私有成员。

class MyClass {
  private myPrivateMember: number;

  constructor(myPrivateParameter: number) {
    this.myPrivateMember = myPrivateParameter;
  }

  private myPrivateMethod(): void {
    console.log("私有方法被调用");
  }
}

const myObject = new MyClass(10);
console.log(myObject.myPrivateMember); // 错误: 属性“myPrivateMember”为私有属性,无法访问
myObject.myPrivateMethod(); // 错误: 方法“myPrivateMethod”为私有方法,无法访问
受保护(protected)

受保护成员可以被定义它们的类和其子类访问。这意味着仅可以从类内部或子类中访问受保护成员。

class MyParentClass {
  protected myProtectedMember: number;

  constructor(myProtectedParameter: number) {
    this.myProtectedMember = myProtectedParameter;
  }
}

class MyChildClass extends MyParentClass {
  constructor() {
    super(10);
    console.log(this.myProtectedMember); // 输出: 10
  }
}

const myChildObject = new MyChildClass();
console.log(myChildObject.myProtectedMember); // 错误: 属性“myProtectedMember”为受保护属性,无法访问
"超级"关键字

"超级"关键字用于在子类中访问父类的成员。通过使用"超级"关键字,可以调用父类的构造函数、访问父类的属性和方法。

下面的示例中,我们定义了一个父类Animal和一个子类Dog。在子类Dog的构造函数中,我们使用"超级"关键字调用父类Animal的构造函数并传递name参数。

class Animal {
  protected name: string;

  constructor(name: string) {
    this.name = name;
  }

  public speak(): void {
    console.log("动物发出声音");
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name); // 调用父类Animal的构造函数
  }

  public speak(): void {
    super.speak(); // 调用父类Animal的speak方法
    console.log(`狗叫,我的名字是${this.name}`);
  }
}

const myDog = new Dog("旺财");
myDog.speak();

运行以上代码,输出结果为:

动物发出声音
狗叫,我的名字是旺财

可以看到,子类Dog通过"超级"关键字调用了父类Animalspeak方法,并在其基础上进行了扩展。

总结

在JS++中,访问修饰符允许程序员控制成员的访问权限,提高代码的安全性和可维护性。公共成员可以被外部访问,私有成员只能被类内部访问,受保护成员可以被子类访问。

此外,"超级"关键字允许在子类中访问父类的成员,方便代码的重用和扩展。

通过使用这些特性,程序员可以更好地组织代码,并提高代码的可读性和可维护性。