ArkTS面向对象
·
class类的概念
类适用于 创建对象 模板。同时类声明也会引入一个新类型,可定义其 实例属性、方法和构造函数
类名 首字母大写(规范)
class 类名{
//字段名、类型、初始值
字段名1: 类型 = 'xxx'
//可选字段可以不设置初始值;使用时需要配合 可选链操作符 避免出错
字段名2?: 类型
}
//创建类的对象
let 对象名: 类名 = new 类名()
注:‘?’ 表示可选链操作符,若有值,则会正常输出,无值时输出其本身(undefined)
构造函数
- 希望不同的实例,有不同的字段初始值时,使用构造函数
- 通过new实例化的时候,会调用 constructor
- 通过关键字 this 可以获取到实例对象
constructor(name: string, price: number) {
this.name = name
this.price = price
}
注:构造器内也可以传入整个对象,且可以不管传参的顺序,因为接口已经定义好了。
类中方法
类中可以定义方法,并在内部编写逻辑
例如:
sayHi(yourName: string){
//通过this可以访问到创建出来的实例对象
console.log(`hello,${yourName},我是${this.name}`)
}
sing(): string{ //也可以加类型,但是需要有返回值
return '稻香'
}
静态属性和方法
类 还可以添加静态属性、方法,后续访问需要通过 类 来完成
静态属性方法是给 类 添加的(属于类的),哪怕不创建对象,也可以使用。
static version: string = 'v2.0'
static vv: string
static getRandom(){
return Math.random()
}
//使用时
类.version //不需要实例化类
类的继承(重写)
继承 extends 和 super 关键字
类可以通过继承快速获取另一个类的字段和方法
子类通过extends关键字继承父类
重写父类的方法直接写同名的方法,在其中编写新内容即可
class Student extends Person{
//子类中如果想有自己独有的属性和方法
grade: string
study() {
console.log('好好学习,天天向上!')
}
constructor(name: string, age: number, grade: string) {
//父类中的构造函数,此时需要我们手动调用
//super() 访问父类的构造函数;super.方法名() 访问父类的方法;super.属性名 访问父类的属性
super(name, age)
//完成自己属性的初始化
this.grade = grade
}
//子类中想要重写父类中的方法,只需提供同名的方法即可
sayHi(): void {
super.sayHi()
super.name //获取父类的属性 (获取属性时,最好不要使用,如果要用,需要用this.xxx代替,否则获取不到值)
super.age //获取父类的属性
console.log(this.name) //此处不要用super.name,会无法获取到值!
console.log(`hello,nice to meet you !`) //在父类方法的基础上再进行扩展
}
}
子类构造函数中需要使用super关键字将传进来的参数传递给父类构造函数
修饰符
修饰符(readonly、private...)
类的方法和属性 可以通过修饰符来 限制 访问
包括:readonly、private、protected和public。省略默认是public
readonly
- 只可以取值,无法修改值
readonly legs: number = 4
c1.legs = 6 //不能修改!!!
private
- 修饰的成员不能在声明该成员的类之外访问,包括子类
- 若要使用private修饰的成员,必须使用get和set方法
protected
- protected修饰符和private很像,不同的是protected修饰的成员允许在派生类(子类)中访问,但不能再外部访问
public(默认)
所修饰的成员在程序任何可访问该类的地方都可见。
类型检测
typeof
- 仅能用于判断简单类型,复杂类型要用instanceof判断
typeof 111 //输出是number类型
instanceof
- 检测某个对象是否是某个类的实例
//可用instanceof判断是否能访问到后面的类中提供的属性和方法
class Person{}
let p: Person = new Person()
console.log('判断结果1:', p instanceof Person) //判断 对象 是否为某个类的实例
注:
- 上面的“p”这种对象不可用typeof判断类型!
- instanceof亦可以判断是否为数组类型。
接口的继承和实现
接口的继承
接口继承也使用extends关键字
需要继承的接口只需要添加新的成员变量和类型即可,依然可以当做对象使用
interface IAnimal {
name: string
age: number
}
interface IDog extends IAnimal {
color: string
}
接口的实现
主要用于约束类,通过结合 implements 来限制 类 必须要有的 某些属性 和 方法。类依然可以有更多的属性或方法,但是必须要有所实现接口中的属性和方法。
interface IDog {
name: string
age: number
jump:() => void
}
class Dog implements IDog {
name: string
age: number
desc: string //自己的属性
jump(){}
}更多推荐



所有评论(0)