代碼:
// 本節內容
// 1.類的定義
// 2.類的繼承
// 3.訪問修飾符
// 4.靜態屬性和靜態方法
// 5.抽象類和多態
// js
// function Person(name) {
// this.name = name;
// this.print = function() {
// console.log(this.name)
// }
// }
// var p = new Person("aa")
// p.print()
// ts 1.類的定義
class Person {
name:string;
age:number;
constructor(name:string, age:number){
this.name = name;
this.age = age;
}
print() {
return this.name + ":" + this.age
}
}
var p = new Person("張三",20)
console.log(p.print())
// 2.類的繼承
class Student extends Person {
cardnumber:string;
school:string;
constructor(cardnumber:string, school:string){
super("zhangsan", 19)
this.cardnumber = cardnumber;
this.school = school
}
dohomework(){
return this.name + "今年" + this.age + "歲,就讀於" + this.school + "編號" + this.cardnumber
}
}
// var stu1 = new Student("zhangsan",20)
// stu1.cardnumber = "1001"
// stu1.school = "北京大學"
var stu1 = new Student("1001","北京大學")
console.log(stu1.dohomework())
// 接口的繼承
interface Printer {
getmsg();
}
interface ColorPrinter extends Printer {
printing();
}
class HPPrinter implements ColorPrinter {
printing(){
console.log("打印成功")
}
getmsg(){
console.log("HP10011")
}
}
var hp = new HPPrinter()
hp.getmsg()
hp.printing()
// 3.訪問修飾符
// public / private /protected
class People {
public name:string;
private age:number;
protected email:string;
constructor(name:string,age:number,email:string){
this.name = name;
this.age = age;
this.email = email;
}
print(){
return this.name + ":" + this.age
}
}
var p1 = new People("zhangsan",20,"111@qq.com")
console.log(p1.name)
// console.log(p1.age)
// console.log(p1.email)
class Teacher extends People {
show(){
console.log(this.name)
// console.log(this.age)
console.log(this.email)
}
}
// 4.靜態屬性和靜態方法
// function Boss() {
// // 實例屬性
// this.name = "zhangsan";
// // 實例方法
// this.print = function(){}
// }
// // 靜態屬性
// Boss.age = 19
// // 靜態方法
// Boss.show = function() {}
// // 調用靜態方法
// Boss.show()
// // 調用靜態屬性
// console.log(Boss.age)
// // 調用實例方法和屬性
// var boss = new Boss()
// boss.print()
// console.log(boss.name)
// ts
class Boss {
// 實例屬性
name:string;
age:number;
// 靜態屬性
static email:string;
constructor(name:string,age:number,email:string){
this.name = name;
this.age = age;
Boss.email = email;
}
// 實例方法
print(){
return this.name + ":" + this.age
}
// 靜態方法
static show(){
console.log("show 方法")
}
}
// 調用靜態方法
Boss.show()
// 嗲用實例方法
var boss = new Boss("zhangsan",22,'111@qq.com')
console.log(boss.print())
// 注:不依賴於類的方法,可以為靜態方法
// 5.多態(同一個父類,不同的子類,有不同的實現)
class Animal {
eat() {
console.log("animal eat")
}
}
class Cat extends Animal {
eat() {
console.log("貓吃魚")
}
}
class Dog extends Animal {
eat() {
console.log("狗吃肉")
}
}
var c = new Cat()
c.eat()
var d = new Dog()
d.eat()
// 6.抽象類/抽象方法
// 6.1 抽象類是提供其他類繼承的基類(父類),不能直接被實例
// 6.2 抽象方法只能包含在抽象類中,抽象類中可以包含抽象方法和非抽象方法
// 6.3 子類繼承抽象類,實現抽象方法
// 定義抽象類
abstract class Beast {
// 定義抽象方法(抽象方法沒有具體的方法體)
abstract eat();
run(){
console.log("run run run")
}
}
class Tiger extends Beast {
eat() {
console.log("天王蓋地虎")
}
}
var t = new Tiger()
t.eat()
.
