typescript静态属性,静态方法,多态,抽象类
程序员文章站
2022-03-05 09:13:23
...
1.静态属性,静态方法
class Person {
name: string;
static age: number = 20; //定义静态属性
//构造函数
constructor(name: string) {
this.name = name;
}
//静态方法 无返回值
static run(): void {
console.log(`${Person.age}静态属性`); //获取静态属性,结果是20静态属性
//不能直接获取内部的属性 比如this.name
}
work(): string {
return `我是${this.name}`;
}
}
let p = new Person("张三"); //实例化
Person.run(); //结果是20静态属性 调用静态方法
console.log(p.work());
console.log(Person.age); //调用静态属性
2.多态
//多态 属于继承
class Animal {
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}再吃东西`;
}
}
3.抽象
抽象类提供其他继承的基类,不能被实例化
用abstract定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现,并且必须在派生类中实现
abstract抽象方法必须放在抽象类里面
//抽象 一般用于制定标准
abstract class Animal {
name: string;
protected constructor(name: string) {
//constructor尽量设置成protected
this.name = name;
}
//抽象方法
abstract eat(): any;
//非抽象方法派生类可以不实现
run(): void {
alert(`父类非抽象方法:${this.name}`);
}
}
//派生类 子类
class Dog extends Animal {
constructor(name: any) {
super(name);
}
//派生类必须实现抽象方法,不实现会报错
eat(): void {
console.log(this.name);
}
}
let d = new Dog("dg");
d.eat(); //结果是dg
d.run(); //alert出来 父类非抽象方法:dg
推荐阅读
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
-
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
-
php之static静态属性与静态方法实例分析
-
php面向对象中static静态属性和静态方法的调用
-
php面向对象中static静态属性与方法的内存位置分析
-
php静态成员方法和静态的成员属性的使用方法
-
用JavaScript实现静态私有变量,静态私有方法,私有变量,私有方法,公有属性,公有办法
-
PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子
-
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
-
Java基础知识回顾第四篇 - &和&&|方法重写重载|成员变量静态变量|抽象类接口多态