在面向?qū)ο笳Z言中,類是一種面向?qū)ο笥?jì)算機(jī)編程語言的構(gòu)造历造,是創(chuàng)建對象的藍(lán)圖,描述了所創(chuàng)建的對象共同的屬性和方法闹炉。class

1诡必、基本示例
class Person {
    // 聲明屬性
    name: string
    // 構(gòu)造方法
    constructor(name: string) {
        this.name = name;
    }
    // 一般方法
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
// 創(chuàng)建類的實(shí)例
let person = new Person('李四');
// 調(diào)用實(shí)例的方法
person.sayHi();
2奢方、靜態(tài)屬性

只能通過類訪問的屬性或方法。

class Person {
    name: string = '張三'
    static age: number = 18
    constructor() {
        console.log(this.age); // 報(bào)錯(cuò)
        console.log(Person.age); // 18
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
let p1 = new Person();
console.log(Person.age); // 18
3爸舒、類修飾符
  • public 公有的 屬性不添加修飾符默認(rèn)為公有的 可以在任何地方被訪問
  • private 私有的 不能在聲明它的類的外部訪問
  • protected 受保護(hù)的 和privite類似 區(qū)別是它的子類中是允許訪問的
  • readonly 將屬性設(shè)置為只讀狀態(tài) 不可更改
    3.1蟋字、示例
class Person {
    public name: string
    private age: number
    protected sex: string
    constructor(name: string, age: number, sex: string) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
let p = new Person('張三', 18, '男');
console.log(p);
console.log(p.age); // 報(bào)錯(cuò) 私有屬性 只能在類中被訪問
console.log(p.sex); // 報(bào)錯(cuò) 受保護(hù)的 只能在類中或子類中被訪問

當(dāng)構(gòu)造函數(shù)的修飾符是private時(shí),該類不允許被繼承或者實(shí)例化扭勉。

class Person {
    public name: string
    private constructor(name: string) {
        this.name = name;
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}

let p = new Person('張三'); // 報(bào)錯(cuò) 構(gòu)造函數(shù)是類私有的 只能在類中訪問

當(dāng)構(gòu)造函數(shù)的修飾符是private時(shí)鹊奖,該類不允許被繼承或者實(shí)例化。

class Person {
    public name: string
    protected constructor(name: string) {
        this.name = name;
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
class Son extends Person{
    constructor(name: string) {
        super(name);
    }
}

let p = new Person('張三'); // 報(bào)錯(cuò) 構(gòu)造函數(shù)是受保護(hù)的 只能在類中訪問
let son = new Son('張三');

3.2涂炎、readonly

class Person {
    readonly name: string
    constructor(name: string) {
        this.name = name;
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
let p = new Person('張三');
p.name = '李四'; // 報(bào)錯(cuò) name是只讀屬性

readonly 可以在構(gòu)造函數(shù)中被更改

class Person {
    readonly name: string = '張三'
    constructor(name: string = '李四') {
        this.name = name;
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
let p = new Person();
console.log(p.name); // 李四
let p1 = new Person('王五');
console.log(p1.name); // 王五

3.3忠聚、參數(shù)屬性
構(gòu)造函數(shù)中的參數(shù) 一旦使用修飾符后 類中就多了一個(gè)屬性 這叫做參數(shù)屬性

class Person {
    constructor(readonly name: string = '李四') {
    }
    sayHi() {
        console.log(`hello ${this.name}`);
    }
}
let p = new Person();
console.log(p.name); // 李四
4、存取器

讓我們可以有效的控制對對象中成員的訪問 通過getters和setters來實(shí)現(xiàn)唱捣。

class Person {
    firstName: string = 'A'
    lastName: string = 'B'
    get fullName () {
        return `${this.firstName}_${this.lastName}`;
    }
    set fullName (value) {
        let arr = value.split('-');
        this.firstName = arr[0];
        this.lastName = arr[1];
    }
}
let p = new Person();
console.log(p.fullName); // A_B
p.fullName = 'A-C';
console.log(p.fullName); // A_C
5两蟀、繼承 extends

繼承是一種聯(lián)結(jié)類與類的層次模型。指的是一個(gè)類繼承另外的一個(gè)類的功能爷光,并可以增加新功能的能力,繼承是類與類或者接口與接口之間最常見的關(guān)系澎粟。

class Person {
    name: string
    age: number
    sex: string
    constructor(name: string = 'jack', age: number = 18, sex: string = '男') {
        this.name = name;
        this.age = age;
        this.sex = sex
    }
    sayHi(str: string = 'and you?') {
        console.log(`姓名:${this.name}-年齡:${this.age}-性別:${this.sex}   ${str}`);
    }
}
class Son extends Person {
    constructor(name: string, age: number, sex: string) {
        super(name, age, sex);
    }
}
let persons = new Person();
let son = new Son('jack1', 20, '男');
persons.sayHi();
son.sayHi(); // 繼承父類里的sayHi方法
6蛀序、多態(tài)

父類型的引用指向了子類型的對象欢瞪,不同類型的對象針對相同的方法,產(chǎn)生了不同的行為徐裸。

class Animal {
    name: string
    constructor(name: string = '小花貓') {
        this.name = name;
    }
    eat(food: string = '魚') {
        console.log(`${this.name}---${food}`);
    }
}
class Dog extends Animal {
    constructor(name: string) {
        super(name);
    }
    eat(food: string = '骨頭') {
        console.log(`${this.name}---${food}`);
    }
}
class Pig extends Animal {
    constructor(name: string) {
        super(name);
    }
    eat(food: string = '大白菜') {
        console.log(`${this.name}---${food}`);
    }
}
let ani: Animal = new Animal();
ani.eat();
let dogs: Dog = new Dog('阿黃');
dogs.eat();
let pigs: Pig = new Pig('天蓬元帥');
pigs.eat();

let dogs1: Animal = new Dog('阿黃');
dogs.eat();
let pigs1: Animal = new Pig('天蓬元帥');
pigs.eat();

function getEat(ani: Animal) {
    ani.eat();
}
getEat(dogs1);
getEat(pigs1);
7遣鼓、抽象類 abstract

抽象類做為其它子類的基類使用。它們不能被實(shí)例化重贺,因?yàn)樗锩姘粋€(gè)或多個(gè)抽象方法骑祟。所謂的抽象方法,是指不包含具體實(shí)現(xiàn)的方法气笙。抽象類中的抽象方法必須在子類中實(shí)現(xiàn)次企。

abstract class Animal {
    abstract cry()
    run() {
        console.log('run');
    }
}
let ani = new Animal(); // 報(bào)錯(cuò)

抽象類不允許被實(shí)例化,只能在子類中實(shí)現(xiàn)抽象方法

abstract class Animal {
    abstract cry()
    run() {
        console.log('run');
    }
}
class Dog extends Animal {
    cry() {
        console.log('dog cry');
    }
}
let dog = new Dog();
dog.cry();
dog.run();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潜圃,一起剝皮案震驚了整個(gè)濱河市缸棵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谭期,老刑警劉巖堵第,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隧出,居然都是意外死亡踏志,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門胀瞪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來针余,“玉大人,你說我怎么就攤上這事赏廓『桑” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵幔摸,是天一觀的道長摸柄。 經(jīng)常有香客問我,道長既忆,這世上最難降的妖魔是什么驱负? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮患雇,結(jié)果婚禮上跃脊,老公的妹妹穿的比我還像新娘。我一直安慰自己苛吱,他們只是感情好酪术,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般绘雁。 火紅的嫁衣襯著肌膚如雪橡疼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天庐舟,我揣著相機(jī)與錄音欣除,去河邊找鬼。 笑死挪略,一個(gè)胖子當(dāng)著我的面吹牛历帚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杠娱,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挽牢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了墨辛?” 一聲冷哼從身側(cè)響起卓研,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睹簇,沒想到半個(gè)月后奏赘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡太惠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年磨淌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凿渊。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梁只,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埃脏,到底是詐尸還是另有隱情搪锣,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布彩掐,位于F島的核電站构舟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堵幽。R本人自食惡果不足惜狗超,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朴下。 院中可真熱鬧努咐,春花似錦、人聲如沸殴胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竿屹,卻和暖如春音五,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羔沙。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厨钻,地道東北人扼雏。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像夯膀,于是被迫代替她去往敵國和親诗充。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容