typeScript類-クラス
5363 ワード
1、多態
実はJsのコンストラクションみたいな感じです.
JQextensのように、拡張機能の役割を果たしています.新しいクラスはextensの後ろのクラスの方法と属性を継承して呼び出します.
読み取り専用の属性は宣言時または構造関数で初期化されなければなりません.値は修正されません.constと似ています.
クラスの中で一つの属性をprvateで修飾すると、クラスの外部でこの属性にアクセスできなくなります.この時はgetters/settersを通してパッケージ化して、クラスの外部でこの属性にアクセスすることができます.特に、getだけを持ってsetを持たないアクセサは、自動的にreadonlyと推定される.つまり、getだけ書いてsetがないと、私たちは値を変えることができません.
javaと似ています.staticのキーワードを使って修飾します.staticで修飾した属性は、このクラスがロードされた時に初期化されます.静的属性は直接にクラス名を通してアクセスします.
abstractキーワードは抽象類を定義し、抽象類の内部で抽象的な方法を定義するために用いられ、サブクラスは親の抽象的な方法を実現しなければならず、それらは実用化されず、継承のみを提供する.
実はJsのコンストラクションみたいな感じです.
//
class Person {
//
name: string;
age: number
//
constructor(name: string, age: number) {
this.name = name
this.age = age
}
//
say() {
return ' ' + this.name + ', ' + this.age + ' !'
}
}
let p1 = new Person(' ', 23)
console.log(p1) => // Person { name: ' ', age: 23 }
let psay = p1.say()
console.log(psay) => // , 23 !
2、継承するJQextensのように、拡張機能の役割を果たしています.新しいクラスはextensの後ろのクラスの方法と属性を継承して呼び出します.
// Student ,Person
class Student extends Person {
school: string;
constructor(school: string) {
// Person super() ,super ( ),super()
super(' ', 18)
this.school = school
}
// , , Person say(), Student say sayHi
sayHi() {
return ` ${this.name}, ${this.age} , ${this.school}`
}
}
let p2 = new Student(' ')
let nsay = p2.say()
// say , Student say(), Person
console.log(nsay) => // , 18 ,
// say , Person say()
console.log(nsay) => // , 18 !
3、クラス(構造関数)変数のスコープ// lei ( )
// public => , ,
class Person {
public name: string;
constructor(name: string) {
this.name = name
}
}
let p3 = new Testname(' ')
console.log(p3.name) => //
// private =>
class Person {
private name: string;
constructor(name: string) {
this.name = name
}
}
let p3 = new Testname(' ')
console.log(p3.name) => //
// vsCode : “name” , “Testname”
// :Property 'name' is private and only accessible within class 'Testname'
// ,private ,
// protected =>
class Person {
pretected name: string;
constructor(name: string) {
this.name = name
}
}
let p3 = new Testname(' ')
console.log(p3.name) => //
// vsCode : “name” , “Testname”
// :Property 'name' is protected and only accessible within class 'Testname' and its subclasses
// ,pretected
サブクラスとベース(親タイプ)class Son extends Father {}
//
Son Father
4、readonly読み取り専用属性読み取り専用の属性は宣言時または構造関数で初期化されなければなりません.値は修正されません.constと似ています.
class Person {
pretected name: string;
constructor(name: string) {
this.name = name => //
}
}
5、アクセサクラスの中で一つの属性をprvateで修飾すると、クラスの外部でこの属性にアクセスできなくなります.この時はgetters/settersを通してパッケージ化して、クラスの外部でこの属性にアクセスすることができます.特に、getだけを持ってsetを持たないアクセサは、自動的にreadonlyと推定される.つまり、getだけ書いてsetがないと、私たちは値を変えることができません.
class Person {
private _age: number; => // , “_age” , 。
constructor() {
this._age = 0 => // ,
}
//
/* java getAge()*/
get age () {
return this._age
}
/* java setAge()*/
set age (newAge: number) {
if (newAge < 0 || newAge > 150) {
console.log(' , !')
} else {
this._age = newAge
}
}
say () {
return ` ${this._age} !`
}
}
let p4 = new Person()
p4._age = 30 => “_age” , “Person”
p4.age = 30
console.log(p4.say()) => // 30 !
6、静的属性javaと似ています.staticのキーワードを使って修飾します.staticで修飾した属性は、このクラスがロードされた時に初期化されます.静的属性は直接にクラス名を通してアクセスします.
class Person {
// constructor , static
static school:String = " ";
/* */
constructor(private name: String, protected age: number) {
this.name = name;
this.age = age;
}
private say() {
console.log(`${this.name},${this.age}`);
}
protected tell() {
console.log(`${this.name},${this.age}`);
}
}
Person.school;// ,
console.log(Testschool.school) => // , undefined, new ,
console.log(Testschool.school) => // ,
7、抽象類(abstract)abstractキーワードは抽象類を定義し、抽象類の内部で抽象的な方法を定義するために用いられ、サブクラスは親の抽象的な方法を実現しなければならず、それらは実用化されず、継承のみを提供する.
abstract class Father {
name: string;
age: number;
constructor() {
this.name = ' '
this.age = 23
}
abstract say():string => ,
tell() {
console.log(' !')
}
}
class Son extends Father {
school: string;
constructor() {
super()
this.school = ' '
}
say() {
return ' !'
}
}
let p5 = new Son()
p5.tell() => // !
console.log(p5.say()) => // !
let p6 = new Father() => // :
8、書き換えるclass NewFather {
say() {
console.log(' ')
}
}
class NewSon extends NewFather {
say() {
super.say()
console.log(' ')
}
}
let g: NewSon = new NewSon()
g.say() =>
result:
転載先:https://www.cnblogs.com/zjh-study/p/10650648.html