ts 之 定义类 Class 基础 - 实操
1:简单定义一个 class
class Person {
cName : string
cAge : number
cSex : string
constructor ( name : string, age : number, sex : string) {
this . cName = name
this . cAge = age
this . cSex = sex
}
about ( str : string) {
return '我是' + this . cName + '今年' + this . cAge + '了,性别为:' + this . cSex + '之' + str
}
}
const p1 = new Person ( 'xzl' , 100 , '男' )
const res = p1. about ( '-测试' )
console. log ( 'res' , res)
接口的 简单继承
class Animal {
name : string
constructor ( name : string) {
this . name = name
}
run ( speed: string) : string {
return this . name + '-的速度为-' + speed
}
}
class dog extends Animal {
constructor ( name : string) {
super ( name)
}
run ( speed: string) : string {
console. log ( '子类方法' )
return super . run ( speed)
}
swim ( str: boolean) : string {
const res = str ? '是' : '否'
return this . name + '- 是否会游泳-' + res
}
}
const p1 = new dog ( '二哈' )
const res = p1. run ( '快' )
console. log ( 'res' , res)
const res2 = p1. swim ( true )
console. log ( 'res2' , res2)
2:class之中的 多态
class Animal {
name : string
constructor ( name : string) {
this . name = name
}
run ( speed: string) : string {
return this . name + '-的速度为-' + speed
}
}
class Dog extends Animal {
constructor ( name : string) {
super ( name)
}
run ( speed: string) : string {
console. log ( '子类方法' )
return super . run ( speed)
}
swim ( str: boolean) : string {
const res = str ? '是' : '否'
return this . name + '- 是否会游泳-' + res
}
}
class Cat extends Animal {
constructor ( name : string) {
super ( name)
}
run ( speed: string) : string {
return super . run ( speed)
}
}
const an1 : Animal = new Animal ( '动物' )
console. log ( an1. run ( '快' ) )
const p1 : Dog = new Dog ( '二哈' )
const res = p1. run ( '快' )
console. log ( 'res' , res)
const res2 = p1. swim ( true )
console. log ( 'res2' , res2)
const c1 : Animal = new Cat ( '小猫' )
console. log ( c1. run ( '快' ) )
3:class之中的 修饰符 public等
public 修饰公共的 类里面、外面都可使用 private 修饰私有的 只能在当前类里面调用,子类无法访问 protected 修饰私有的 只能在当前类里面调用,但子类可以访问 readonly 只读类型 无法修改当前值
class Animal {
readonly age: number
public name : string
public constructor ( name : string, age = 0 ) {
this . name = name
this . age = age
}
public run ( speed: string) : string {
return this . name + '-的速度为-' + speed
}
private fly ( speed: string) : string {
return this . name + '-是否能飞-' + speed
}
protected rap ( speed: string) : string {
return this . name + '-是否能rap-' + speed
}
}
class Dog extends Animal {
constructor ( name : string) {
super ( name)
}
run ( speed: string) : string {
console. log ( '子类方法' )
return super . run ( speed)
}
swim ( str: boolean) : string {
const res = str ? '是' : '否'
return this . name + '- 是否会游泳-' + res
}
}
class Cat extends Animal {
constructor ( name : string) {
super ( name)
}
run ( speed: string) : string {
return super . run ( speed)
}
}
const an1 : Animal = new Animal ( '动物' )
console. log ( an1. run ( '快' ) )
const p1 : Dog = new Dog ( '二哈' )
console. log ( p1. run ( '快' ) )
const c1 : Animal = new Cat ( '小猫' )
console. log ( c1. run ( '快' ) )
4:class之中的 set与get属性
class Person {
firstName : string
lastName : string
constructor ( firstName : string, lastName : string) {
this . firstName = firstName
this . lastName = lastName
}
get fullName ( ) {
return this . firstName + '-' + this . lastName
}
set fullName ( val ) {
const arr = val. split ( '-' )
this . firstName = arr[ 0 ]
this . lastName = arr[ 1 ]
}
}
const p1 : Person = new Person ( 'x' , 'lp' )
console. log ( 'p1' , p1. fullName)
p1. fullName = 'xxx-pppp'
console. log ( 'p1' , p1. fullName)
5:class之中的 静态属性
class Person {
name1 : string = 'A'
static name2 : string = 'B'
}
const p1 : Person = new Person ( )
console. log ( Person. name2)
console. log ( p1. name1)
p1. name1 = 'AA'
console. log ( p1. name1)
5:class之中的 抽象类
abstract class Animal {
abstract eat ( ) : any
run ( ) {
console. log ( '跑得快' )
}
}
class Dog extends Animal {
eat ( ) {
console. log ( '吃吃吃' )
}
}
const dog1 = new Dog ( )
console. log ( 'dog1' , dog1. eat ( ) )
6:通过接口限制类
interface Person {
run ( type: boolean) : boolean;
}
class Man implements Person {
run ( type: boolean) : boolean {
return true ;
}
}
let man1 = new Man ( ) ;
console. log ( "flag" , man1. run ( true ) ) ;