日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

TypeScript類和多態、抽象類、訪問修飾符

作者:lq313131 更新時間: 2023-07-27 編程語言

目錄

一、類

二、多態(一個對象多種形態)

三、抽象類

四、訪問修飾符

readonly修飾符


一、類

javascript關于類的側重點主要是原型對象

面向對象類-->類是創建對象的模板,一個類可以創建多個對象

class Person{
?? ?foo(){}
?? ?bar(){}
}
let p1=new Person()
p1.var()
p1.foo()

二、多態(一個對象多種形態)

多態存在的三個條件:

(1)存在繼承

(2)子類實現對父類方法的重寫

(3)父類類型的引用指向子類對象

繼承使用extends關鍵字;

重寫:如果子類方法與父類一致,子類會對父類的方法進行重寫;

父類類型的引用指向子類對象,通過該引用可以訪問到父類的特性(屬性、方法),但是無法訪問子類得特性;如果子類對父類的特性進行重寫,通過該引用調用的重寫特性依舊為子類特性。

class Person{
	name:string;
	age:number;
	weight?:number;
	say():void{
		console.log('hello person');
	}
}
// 子類繼承了父類
class Student extends Person{
	stuNo:string;
  // 子類對父類方法進行重寫
	say():void{
		console.log('hello student');
	}
  // 子類還可以有自己的方法
	study():void{
		console.log('好好學習,天天向上');
	}
}
// 父類類型的引用指向子類對象 => 多態
let s1:Person=new Student(); 
// s1可以調用父類對象的屬性、方法
s1.age=12;
s1.name='terry';
// 子類對父類方法重寫,會調用子類的方法
s1.say(); //hello student

// 實例s1無法調用子類對象的屬性、方法
// s1.stuNo='1002';
// s1.study()

//打印s1可以看出 父類類型的引用指向子類對象,因為前面顯示的是Student
console.log(s1);//Student { age: 12, name: 'terry' }

三、抽象類

什么是抽象類? ? 一般情況下,抽象類無法創建對象,抽象類中可以存在抽象方法(也可以不存在抽象方法),抽象方法指的是沒有方法體的方法。

抽象類中可以存在抽象方法和非抽象方法,一個類中具有抽象方法,那么該類一定是抽象類 ?。

抽象類存在的意義?為了讓其它類繼承抽象類,并強制要求子類實現抽象方法。

子類繼承抽象類的兩種方式:

1、子類必須實現抽象類中的方法

2、子類成為抽象類

// 使用abstract關鍵字
abstract class Person {
  //抽象方法(沒有方法體{})
  abstract study(): void;
  log(): void {
    console.log('我不是抽象方法');
  };
}
// 子類繼承抽象類 兩種方式:
// 1.實現抽象類中方法study
class Student extends Person {
  study(): void {
    console.log('好好學習,天天向上');
  }
  // 還可以有自己的方法
  cook(): void {
    console.log('學會了做飯');
  }
}
let s3: Student = new Student();
s3.study();//好好學習,天天向上
s3.cook();//學會了做飯
s3.log();//我不是抽象方法


// 2.自身也成為抽象類
// abstract class Student2 extends Person1{

// }

四、訪問修飾符

public 表示共有的,可以在當前類、子類、其他類進行訪問

protected 表示保護的,可以在當前類、子類進行訪問

private?表示私有的,只能在當前類中訪問

readonly修飾符

你可以使用 readonly關鍵字將屬性設置為只讀的。 只讀屬性必須在聲明時或構造函數里被初始化。

class Person {
  public name: string;
  protected age: number;
  private weight: number;
  readonly gender: string;
  constructor(name, age, weight, gender) {
    this.name = name;
    this.age = age;
    this.weight = weight;
    this.gender = gender;
  }
  protected foo() {
    console.log(this.name);
    console.log(this.age);
    console.log(this.weight);
  }
}
class Student extends Person {
  constructor(name, age, weight, gender) {
    super(name, age, weight, gender);
  }
  bar() {
     // super 是父類的引用
    super.foo()
  }
};
let s1: Student = new Student('zhangsan', 12, 40, 'male');
console.log(s1.name);//zhangsan
// gender是只讀屬性,不可修改
// s1.gender='female';
s1.bar();//zhangsan 12 40

原文鏈接:https://blog.csdn.net/lq313131/article/details/126978343

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新