// 1 基础用法
/**
* class Person {
name: string; // 属性,前面省略了public关键词
constructor(n:string) { // 构造函数,实例化类的时候触发的方法
this.name = n
}
run():void{
alert(this.name)
}
}
var p = new Person('张三')
p.run()
*/
// 2 升级用法
/**
* class Person {
name: string; // 属性,前面省略了public关键词
constructor(n:string) { // 构造函数,实例化类的时候触发的方法
this.name = n
}
getName():string{
return this.name
}
setName(name:string):void{
this.name = name
}
}
var p = new Person('张三')
alert(p.getName())
p.setName('李四')
alert(p.getName())
*/
// 3 ts中实现继承 extends super
/**
* class Person {
name: string; // 属性,前面省略了public关键词
constructor(n:string) { // 构造函数,实例化类的时候触发的方法
this.name = n
}
run():string{
return `${this.name} 在运动`
}
}
class Web extends Person{
constructor(name:string) {
super(name) // 初始化父类的构造函数
}
run():string{ // 当父类和子类有同样的方法,优先子类
return `${this.name} 在运动--子类`
}
work() {
alert(`${this.name}在工作`)
}
}
var w = new Web('李四')
alert(w.run())
// w.work()
*/
// 4类里面的修饰符,ts里面定义属性的时候给我们提供了 三种修饰符
/*
public: 公有,在当前类、子类、类外面可以访问(默认修饰符,可以省略)
protected: 保护类型,在当前类、子类可以访问,在类外面无法访问
private: 私有,在当前类可以访问,在子类/类外面无法访问
*/
/*
class Person {
// public name: string;
// protected name: string;
private name: string;
constructor(n:string) {
this.name = n
}
run():string{
return `${this.name} 在运动`
}
}
class Web extends Person{
constructor(name:string) {
super(name)
}
work() {
alert(`${this.name}在工作`)
}
}
// 在当前类访问
var y = new Person('王五')
alert(y.run())
// 在子类访问
var w = new Web('李四1')
w.work()
// 在类外部访问
var z = new Person('张三')
alert(z.name)
*/
// 5 类里面的静态方法
/*
class Person {
name: string
age: number=20
static sex="男" // 静态属性
constructor(name:string) {
this.name = name
}
run(){ // 实例方法,实例化以后才能调用的
alert(`${this.name}在运动`)
}
work(){
alert(`${this.name}在工作`)
}
static print() { // 静态方法
alert('静态方法')
alert('静态方法' + this.age) // 在静态方法中无法直接调用类里面的属性
alert('静态方法' + Person.sex) // 可以调用静态属性
}
}
var p = new Person('张三')
// p.run()
Person.print()
*/
// 6 多态: 属于继承,父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现
/*
class Animal{
name: string
constructor(name: string) {
this.name = name
}
eat() {
console.log('eat')
}
}
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 + '吃老鼠'
}
}
var d = new Dog('dog')
alert(d.eat())
*/
/**
* 7 抽象类: 提供其他类继承的基类,不能被直接实例化
* 用abstract 关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现
* abstract 抽象方法只能放在抽象类里面
* 简而言之: 抽象类和抽象方法用来定义标准,如Animal要求子类必须包含eat方法
*/
abstract class Animal{
name: string
constructor(name: string) {
this.name = name
}
abstract eat():any
}
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 + '吃老鼠'
}
}
var d = new Dog('dog')
alert(d.eat())