首页 > 其他分享 >5.class

5.class

时间:2022-12-08 15:33:00浏览次数:36  
标签:console string Animal constructor class name

一、 类

class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}

let greeter = new Greeter("world");
console.log(greeter.greet())

构造方法是 constructor

 

二、继承

 

class Animal {
move(distanceInMeters: number = 0) {
console.log(`Animal moved ${distanceInMeters}m.`);
}
}

class Dog extends Animal {
bark() {
console.log('Woof! Woof!');
}
}

const dog = new Dog();
dog.bark();
dog.move(10);
dog.bark();

5.class_抽象类

 

super

如果父类的构造函数带参数,则子类调用父类构造函数时

class Animal {
name: string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}

class Snake extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}

class Horse extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 45) {
console.log("Galloping...");
super.move(distanceInMeters);
}
}

let sam = new Snake("Sammy the Python");
let tom: Animal = new Horse("Tommy the Palomino");

sam.move();
tom.move(34)

在构造函数里访问 ​​this​​的属性之前,我们 一定要调用 ​​super()​

三、修饰符

public

在TypeScript里,成员都默认为 public

 

private

 不能在声明它的类的外部访问

class Animal {
private name: string;
constructor(theName: string) { this.name = theName; }
}
new Animal("Cat").name; //报错

protected

 也不能在声明它的类的外部访问,但是可以在派生类中使用

class Animal {
protected name: string;
constructor(theName: string) { this.name = theName; }
}

class E extends Animal{
//继承了父类name
constructor(name: string) {super(name)}

f(){ return 'f:'+this.name; }
}

let ee=new E('tom');
console.log(ee.f())

readonly

只读属性只能在声明时,或者构造函数里被初始化

class Octopus {
readonly name: string;
readonly numberOfLegs: number = 8;
constructor (theName: string) {
this.name = theName;
}
}
let dad = new Octopus("Man with the 8 strong legs");
dad.name = "Man with the 3-piece suit"; // 错误! name 是只读的.

 

 

四、get set

 

class A {
//
private _n: number = 3;

constructor(nn: number) { this.n = nn }

//get属性
get n() {
return this._n;
}
//set属性
set n(x: number) {
if (x < 10) {
this.n = x;
} else {
console.log('不能大于10');
}
}
}

let a = new A(20);

 

五、静态属性

class A {
//
static n: number = 3;
}

console.log(A.n)

 

六、抽象类

 抽象类不直接实例化,

abstract class A {
//抽象方法
abstract f1(): void;
//普通方法
f(): void { console.log('aa') }
}

class B extends A{
//必须要实现父类的抽象类
f1(){}
}

 



标签:console,string,Animal,constructor,class,name
From: https://blog.51cto.com/u_13854953/5922280

相关文章