Ts(二)

class Person {
  // 私有變量
  private name: string;
  
  // 構(gòu)造函數(shù)
  constructor(name: string) {
    this.name = name;
  }
  
  // 獲取名字
  getName(): string {
    return this.name;
  }
  
  // 設(shè)置名字
  setName(name: string): void  {
    this.name = name;
  }
}

let p = new Person("張三");
p.setName("李四");
console.log(p);

繼承

class Son extends Person {
 // 靜態(tài)屬性
  public static age: number = 18;
  // 學校
  public school: string;
  //構(gòu)造方法
  constructor(name: string, school: string) {
    // 訪問派生類的構(gòu)造函數(shù)中的 "this" 前,必須調(diào)用 "super",初始化父類構(gòu)造函數(shù) --并把參數(shù)傳給父類
    super(name); 
    //把傳進來的school賦值給全局變量
    this.school = school;
  }
  //靜態(tài)方法
  static run(name: string): string {
    return `${name}在跑步,他的年齡才${this.age}`;
  }
}

let son = new Son("王五", "清華大學");
son.setName("趙六"); // 私有類也不能在子類的外部訪問,但可通過公開的方法中進行賦值和訪問
console.log(son);
console.log(Son.run("方七"));
console.log(Son.age);

tips:
1.public 在當前類里面窃躲,子類钦睡,類外面都可以訪問
2.protected 在當前類和子類內(nèi)部可以訪問,類外部無法訪問
3.private 在當前類內(nèi)部可訪問洒琢,子類,類外部都無法訪問象迎。
4.屬性不加修飾符,默認就是公有的 (public)

多態(tài)

通過抽象方法/方法重載–實現(xiàn)多態(tài)–多態(tài)的作用是用來定義標準

// 抽象父類
abstract class Animal {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
  //抽象成員--方法
  abstract eat(): any;
  //抽象成員--屬性
  protected abstract ages: Number;
  sleep(): void {
    console.log("睡覺");
  }
}

class cat extends Animal {
  ages: Number = 2;
  constructor(name: string) {
    super(name);
  }
  //非抽象類“cat”不會自動實現(xiàn)繼承自“Animal”類的抽象成員“eat”,  必須手動定義父類中的抽象方法--多態(tài)
  eat(): string {
    return "貓吃魚";
  }

  //多態(tài)
  sleep(): string {
    return "貓在睡覺";
  }
}

console.log(new cat("33").sleep());

tips:
1.抽象類無法實例化呛踊。
2.非抽象類繼承抽象父類時不會自動實現(xiàn)來自父類的抽象成員,必須手動定義父類中的抽象成員谭网,否則報錯。
3.抽象成員包括屬性和方法

接口

在面向?qū)ο蟮木幊讨杏湓瘢涌谑且环N規(guī)范的定義,它定義了行為和動作的規(guī)范要拂,

在程序設(shè)計里面站楚,接口起到一種限制和規(guī)范的作用。

接口定義了某一批類所需要遵守的規(guī)范拉一,接口不關(guān)心這些類的內(nèi)部狀態(tài)數(shù)據(jù)旧乞,也不關(guān)心這些類里方法的實現(xiàn)細節(jié),它只規(guī)定這批類里必須提供某些方法嫡纠,提供這些方法的類就可以滿足實際需要延赌。ts中的接口類似于java,同時還增加了更靈活的接口類型者蠕,包括屬性掐松、函數(shù)粪小、可索引和類等抡句。

屬性接口

interface InterfaceName {
  first: string;
  second?: string; //加個問號,接口屬性就可以變成可傳可不傳了,不傳默認是undefined殴蹄。
}
//打印變量
function logParam(name: InterfaceName): void {
  console.log(name.first, name.second, 11);
}
//定義參數(shù)
const obj = { first: "1", second: "fff", three: 1 };
//logParam({ first: "1", second: "1", three: 1 }); //報錯,只能傳接口定義的值
logParam(obj);

tips: 用個變量來存儲傳入的變量,這樣可以傳入定義的接口以外的值袭灯,否則如果直接傳入對象中無接口定義的值會報錯,所以建議接口定義了哪些值就傳哪些值橘茉。

函數(shù)類型接口

對方法傳入的參數(shù)類型,以及返回值類型進行約束,可批量進行約束姨丈。

interface keyMap {
  (key: string, value: string): string;
}
let logKeyMap: keyMap = function (key1: string, value: string): string {
  return key1 + value;
};
console.log(logKeyMap("key1", "value"));

tips: 接口只對傳入的參數(shù)的類型和參數(shù)的個數(shù)進行約束,不對參數(shù)名稱進行約束翁潘。

可索引接口

  • 約束數(shù)組
interface Arr {
  [index: number]: string;
}
let ss: Arr = ["2121"];
  • 約束對象
interface Obj {
  [index: string]: string;
}

let interfaceArr: Obj = { aa: "1" };

tips:
1.對數(shù)組進行約束,index后必須跟著number類型歼争。
2.對對象進行約束,index后必須跟著string類型
3.索引簽名參數(shù)類型必須為 “string” 或 “number”

類類型接口

  • 對類進行約束,類似抽象類的實現(xiàn)。
interface Animals {
  name: string;
  eat(): void;
}

class Dogs implements Animals {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  eat() {}
}
  • 接口繼承–接口可以繼承接口
interface Dog {
  eat(): void;
}

interface Persons extends Dog {
  work(): void;
}

class Cat {
  code() {
    console.log("貓在敲代碼");
  }
}

//可繼承類后再實現(xiàn)接口
class SuperMan extends Cat implements Persons {
  eat(): void {
    console.log(1);
  }
  work(): void {
    console.log(2);
  }
}
let superMan = new SuperMan();
superMan.code();

tips: 類接口會對類的屬性和方法進行約束,類似非抽象類繼承抽象類時必須實現(xiàn)某些方法和屬性乔遮,但對屬性和方法的類型的約束更加嚴格,除了方法void類型可被重新定義外瞒津,其他屬性或方法的類型定義需要和接口保持一致括尸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屁柏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僧家,老刑警劉巖裸删,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肌稻,居然都是意外死亡匕荸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門诺凡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來践惑,“玉大人,你說我怎么就攤上這事真屯∏钣椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵配深,是天一觀的道長篓叶。 經(jīng)常有香客問我羞秤,道長,這世上最難降的妖魔是什么瘾蛋? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任哺哼,我火速辦了婚禮叼风,結(jié)果婚禮上棍苹,老公的妹妹穿的比我還像新娘。我一直安慰自己孽鸡,他們只是感情好栏豺,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布冰悠。 她就那樣靜靜地躺著配乱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搬泥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音燥透,去河邊找鬼。 笑死肢藐,一個胖子當著我的面吹牛吱韭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播理盆,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猿规,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烦磁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呕乎,失蹤者是張志新(化名)和其女友劉穎陨晶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湿刽,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡褐耳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年铃芦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁烹。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咧虎,死狀恐怖砰诵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茁彭,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布偿乖,位于F島的核電站哲嘲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏画切。R本人自食惡果不足惜囱怕,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一毫别、第九天 我趴在偏房一處隱蔽的房頂上張望典格。 院中可真熱鬧,春花似錦砾肺、人聲如沸防嗡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽他嫡。三九已至,卻和暖如春涮瞻,著一層夾襖步出監(jiān)牢的瞬間鲤拿,已是汗流浹背假褪。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工署咽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人生音。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓宁否,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缀遍。 傳聞我的和親對象是個殘疾皇子慕匠,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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