//4.1定义类
class Person{
name:string;
constructor(n:string){
this.name = n;
}
getName():string{
return this.name
}
setName(name:string):void{
this.name = name;
}
}
const p = new Person('qin');
p.setName('kai');
//实现继承
class Web extends Person{
constructor(name:string){
super(name)
}
}
var w = new Web('li');
w.getName()
//4.2类里的修饰符(ts定义属性时给我们提供了3种修饰符)
// public: 公有, 在类里面,,子类,类外面都可以访问
// protected: 保护类型, 在类里面,子类可以访问,类外部不能访问;
// private:私有, 在类里面可以访问,子类和类外面都不能访问;
//属性如果不加修饰符,默认为公有
//静态方法与实例方法
// function Person2(){
// this.sum = function(){ //实例方法
// console.log(123)
// }
// }
// Person2.run = function(){ //静态方法
// console.log(234)
// }
// Person2.name='aah' //静态属性
// let p2 = new Person2();
// p2.sum();
// Person2.run()
class Grid {
static origin = {x: 0, y: 0};
calculateDistanceFromOrigin(point: {x: number; y: number;}) {
let xDist = (point.x - Grid.origin.x);
let yDist = (point.y - Grid.origin.y);
return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
}
constructor (public scale: number) { }
}
let grid1 = new Grid(1.0); // 1x scale
let grid2 = new Grid(5.0); // 5x scale
console.log(grid1.calculateDistanceFromOrigin({x: 10, y: 10}));
console.log(grid2.calculateDistanceFromOrigin({x: 10, y: 10}));
//多态:父类定义一个方法不去实现,让继承他的子类去实现,每一个子类有不同的表现
//多态属于继承
//抽象:抽象类和抽象方法用来定义标准,这个类要求他的子类必须包含他的方法,抽象方法不包含具体实现并且必须在派生类中实现。
//ts中的抽象类,只是提供其他类型继承的基类,不能直接被实力化。
abstract class Animal{ //抽象类
public name:string;
constructor(name:string){
this.name = name;
}
abstract eat():any;
}
//let a = new Animal();//这时错误写法,抽象类不能被实例化。
class Dog extends Animal{
constructor(name:any){
super(name)
}
eat(){
console.log(this.name)
}
}