class Person {
name: string; // = 'init name'
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
sayHi (msg: string):void{
console.log(`Hello, ${this.name}`);
}
}
访问修饰符
public 公有(默认)
private 私有,只能自己可以访问
protected 受保护,子类可以访问到
对于构造函数的访问修饰符,
如果被设置为 private,就不能被实例化和继承
如果被设置为 protected,就不能被实例化,但可以继承
只能在类的内部创建一个静态方法,用于类实例的创建
class Student{
private constructor(name: string, age: number){
super();
}
static create(name: string, age: number){
return new Student(name, age);
}
}
const jack = Studen.create('jack', 18);
只读属性
可以在访问修饰符后面加上 readonly,只能在定义上设置初始值。
之后在外部或内部都不能被修改了。
类与接口
用接口约束不同类型相同的能力,但能力的实现肯定不一样。
尽量让每个接口的定义,更加简单与细化
interface Eat {
eat(food: string): void;
}
interface Run {
run(distance: number): void;
}
implements 关键词来实现接口
class person implements Eat, Run {
eat(food:string){
console.log(`优雅地进餐: ${food}`);
}
run(distinct:number){
console.log(`直立行走: ${distance}`);
}
}
class Animal implements Eat, Run {
eat(food: string){
console.log(`呼噜呼噜的吃: ${food}`);
}
run(distance: number){
console.log(`爬行: ${distance}`);
}
}
抽象类
与接口相似,但可以包含具体的实现,定义为抽象类之后只能被继承,不能被 new 成实例
abstract class Animal {
eat(food: string){
console.log(`呼噜呼噜的吃: ${food}`);
}
abstract run(distance: number): void;
}
class Dog extends Animal {
run(distance: number): void {
console.log('四脚爬行', distance);
}
}