TypeScript及React学习系列三:typescript中的类(下)

typescript中的类

  • ts类的定义
  • ts中实现继承
  • 类中的修饰符
  • 静态属性与静态方法
  • 多态
  • 抽象方法和抽象类

1. 类的定义

使用class关键字

class Person{
	name:string; //定义属性,前面省略了public
	constrctor(n:string){//构造函数,实例化类的时候会触发
		this.name = n;
	}
	getName():string{
		return this.name;
	}
	setName(name:string):void{
		this.name = name;
	}
}
let p = new Person("李华");
alert(p.getName()); //打印李华

2. ts中实现继承

使用extends、super关键字

class Person{
...//内容与上例相同
}
class Student ectends Person{
	constructor(name:string){
		super(name); //初始化父类的构造函数
	}
}

子类除了可以继承父类的属性和方法,还可以扩展自己的方法

class Person{
...//内容与上例相同
}
class Student ectends Person{
	constructor(name:string){
		super(name); //初始化父类的构造函数
	}
	work():void{ //扩展自身的方法
		alert(`${this.name}在工作`);//打印,李华在工作
	}
}

如果字类和父类方法名一样,优先调用字类的方法

class Person{
	name:string; //定义属性,前面省略了public
	constrctor(n:string){//构造函数,实例化类的时候会触发
		this.name = n;
	}
	study():string{
		return `${this.name}在运动`;
	}
}
let p = new Person("李华");
class Student ectends Person{
	constructor(name:string){
		super(name); //初始化父类的构造函数
	}
	study():void{
		alert(`${this.name}在学习`);
	}
}
let s = new Student("张三");
s.study(); //打印,张三在学习

3. 类中的修饰符

typescript中提供了三种属性修饰符,public,protected,private

  • public : 公有,在当前类里、子类、类外都可访问
  • protected :保护类型,当前类里、子类可以访问,类外不可访问
  • private :私有,当前类里可访问,子类和类外不可访问
public类里、子类、类外
protected类里、子类
private类里

注:如果不加修饰符,则默认为共有public

class Person{
	name:string; //定义属性,默认为public
	constrctor(n:string){//构造函数,实例化类的时候会触发
		this.name = n;
	}
	study():string{
		return `${this.name}在运动`;
	}
}
let p = new Person("李华");
alert(p.name); //当前类访问公有属性

4. 静态属性与静态方法

通过static声明的方法为静态方法,可以直接通过 “类名.方法” 来调用静态方法

class Person{
	public name:string
	public age:number
	constructor(name:string){
		this.name = name;
	}
	study(){ //实例方法,需实例化后才可使用
		alert(`${this.name}在学习`);
	}
	static run(){ //静态方法
		alert(`${this.name}在运动`);
		alert(this.age); //报错,无法在静态方法中直接调用类里的属性
	}
}
Person.run(); //调用静态方法

注:无法在静态方法里直接调用类里的属性

通过static声明的属性为静态属性,可以直接调用

class Person{
	public name:string
	static age:number
	constructor(name:string){
		this.name = name;
	}
	study(){ //实例方法,需实例化后才可使用
		alert(`${this.name}在学习`);
	}
	static run(){ //静态方法
		alert(`${this.name}在运动`);
		alert(this.age); //正确
	}
}
Person.run(); //调用静态方法
alert(Person.age); //正确

5. 多态

多态:父类定义一个方法不去实现,让继承它的子类去实现,每一个子类具有不同的表现
多态属于继承

class Animal{
    public name:string;
    constructor(name:string){
        this.name = name;
    }
    eat(){
        console.log("吃东西");
    }
}
class Dog extends Animal{
    constructor(name:string){
        super(name);
    }
    eat(){
        return this.name + "吃狗粮"
    }
}
class Cat extends Animal{
    constructor(name:string){
        super(name);
    }
    eat(){
        return this.name + "吃猫粮"
    }
}

6. 抽象方法和抽象类

typescript中的抽象类:是提供其他类继承的基类,不能直接实例化;
用abstract关键字来定义抽象方法和抽象类;
抽象类中的抽象方法不包含具体实现并且必须在派生类中实现;
abstract抽象方法只能放在抽象类里;
抽象类和抽象方法用来定义标准;
抽象方法必须在派生类中实现,普通方法可以不实现;

abstract class Animal{//抽象类
    public name : string;
    constructor(name : string){
        this.name = name;
    }
    abstract eat():any; //抽象方法,在派生类中必须实现
    run(){  //普通方法,在派生类中可以不实现
        console.log("跑步");
    }
}

class Dog extends Animal{
    constructor(name:any){
        super(name)
    }
    eat(){
        return this.name + "吃狗粮";
    }
}

class Cat extends Animal{
    constructor(name:any) {
        super(name)
    }
    eat(){
        return this.name + "吃猫粮";
    }
}

let d = new Dog("小黑");
let c = new Cat("加菲");
d.eat(); //小黑吃狗粮
c.eat(); //加菲吃猫粮
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值