类的定义
//定义一个Person类
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
run(): void {//方法
console.log(this.name+ "在跑步");
}
}
var p = new Person("张三");
p.run();
类的继承
通过 extends 来继承父类
通过 super 来初始化父类的构造函数 并且传递参数
//父类
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat(): void {//父类方法
console.log(this.name + "在吃东西");
}
}
//子类
class Dog extends Animal {
age: number;//子类属性
constructor(name: string, age: number) {
super(name);
this.age = age;
}
run(): void {//子类方法
super.eat();//使用super关键字调用父类中的方法
console.log(this.name + "在跑");
}
}
var dog:Dog = new Dog("小狗子", 2);
dog.run();
修饰符
三种修饰符
public
:公有类型,在当前类里面、子类、类外面都可以访问
protected
:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
private
:私有类型,在当前类里面可以访问,子类、类外部都没法访问
readonly
:修饰的不是成员的访问权限,而是成员的再赋值权限。 只读属性必须在声明时或构造函数里被初始化。
静态属性
被静态修饰符修饰的属性就是静态属性,静态属性可以通过类名直接调用
class Person {
name: string;
static sex: string = "男";
constructor(name: string) {
this.name = name;
}
run(): void {//方法
console.log(this.name+ "在跑步");
}
}
console.log(Person.sex);
静态方法
被静态修饰符修饰的方法就是静态方法,静态方法可以通过类名直接调用,但是在静态方法内部,不能直接调用当前类的非静态属性、非静态方法。
class Person {
name: string;
static sex: string = "男";
constructor(name: string) {
this.name = name;
}
run(): void {//方法
console.log(this.name+ "在跑步");
}
static print(): void {//被静态修饰符static修饰的方法
// console.log('姓名:' + this.name);//错误
console.log('性别:' + Person.sex);//正确
// this.run();//错误
}
}
Person.print();
抽象类
抽象类不能被实例化。用abstract
关键字定义抽象类和抽象方法,抽象类中定义的抽象方法没有方法体,子类必须对抽象方法进行重写,abstract抽象方法只能放在抽象类里面。
我们常常使用抽象类和抽象方法用来定义标准。
类似多态:父类定义一个方法不去实现,让继承的子类去实现,每一个子类有不同的表现形式
//动物抽象类,所有动物都在跑(假设),但是吃的东西不一样,所以把吃的方法定义成抽象方法
abstract class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
abstract eat(): any;//抽象方法不包含具体实现并且必须在子类中实现
run() {
console.log(this.name + "在跑")
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法
console.log(this.name + "吃骨头");
}
}
var d: Dog = new Dog("小狼狗");
d.eat();
class Cat extends Animal {
constructor(name: string) {
super(name);
}
eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法
console.log(this.name + "吃老鼠");
}
}
var c: Cat = new Cat("小花猫");
c.eat();