与ES6/ES7中不同的是,在TypeScript可以使用public、private 和 protected这三种访问修饰符。
public
public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
1 2 3 4 5 6 7 8 9 10 11 12
| class Animal{ public name; public constructor (name) { this.name = name; } }
let a = new Animal('Jack')
console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom
|
private
当我们希望有的属性是无法直接存取的,这时候就可以用 private 了
1 2 3 4 5 6 7 8 9 10
| class Animal{ private name; public constructor (name) { this.name = name; } }
// let a = new Animal('Jack')
// a.name = 'Tom' //属性“name”为私有属性,只能在类“Animal”中访问
|
使用 private 修饰的属性或方法,在子类中也是不允许访问的:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Animal{ private name; public constructor (name) { this.name = name; } }
class Cat extends Animal { constructor (name) { super(name); console.log(this.name) //属性“name”为私有属性,只能在类“Animal”中访问 } }
|
protected
而如果是用 protected 修饰,则允许在子类中访问:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Animal { protected name; public constructor(name) { this.name = name; } }
class Cat extends Animal { constructor(name) { super(name); console.log(this.name); //no problem } }
|
抽象类( abstract )
abstract 用于定义抽象类和其中的抽象方法,并且不允许被实例化。其次抽象类中的抽象方法必须被子类实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| abstract class Animal { public name; public constructor(name) { this.name = name; } public abstract sayHi(); }
class Cat extends Animal { public sayHi() { console.log(`Meow, My name is ${this.name}`); } }
let cat = new Cat('Tom');
|