HarmonyOS NEXT鸿蒙开发 ArkTS:访问权限public、protected、private

访问权限

比如:故宫,有些地方不花钱也可以观光,有些地方需要买票才能观光,有些地方是禁止一般游客进入

比如:教学管理系统,学生可以查看成绩、课表等信息;而老师可以修改学生成绩、调整学生课表

这些都是访问权限,更好的体现 封装性,也提供 访问权限

访问权限一共有四种:

  • public
  • protected
  • private

public

由 public 修饰的方法、属性,表示 公有的,可以在任何地方使用

如果不写访问权限,默认是 public

例子

class Phone{
    public name:string = ""
    sn:string = "" // 不写就表示public

    public call(num:string):void{
        console.log("打电话给:",num)
    }
}

const nokia = new Phone()
nokia.name = "李雷的手机"
nokia.sn = "123"

console.log(nokia.name)
console.log(nokia.sn)
nokia.call("110")

protected

由 protected 修饰的方法、属性,是受保护的,只能在当前类中、子类中使用

注意:不能通过对象使用

例子1

class Person {
    // 定义eat() 方法,由 protected 修饰
    protected eat(food:string):void {
        console.log("吃",food)
    }
    // 定义 sleep() 方法,默认为 public
    sleep():void {
        console.log("睡觉")
        this.eat("肉包子") // 可以在该类中调用 protected 修饰的方法
    }
}

测试:

const zhangsan = new Person()

zhangsan.sleep()

// 执行报错,不能通过对象调用 protected 修饰的方法
// zhangsan.eat("红烧肉")

例子2

定义子类,继承 Person 类:

class Student extends Person {

    study(lesson:string): void {
        console.log("学习",lesson);
        this.eat("苹果") // 可以在子类中调用父类的 protected 方法
    }
}

测试代码:

const lilei = new Student()

lilei.sleep() // 可以通过对象调用父类方法

// 执行报错,不能通过对象调用protected修饰的方法
// lilei.eat("红烧肉")

lilei.study("HTML")

private

由 protected 修饰的方法、属性,只能在当前类中使用

注意:

  • 不能通过对象使用
  • 不能在子类中使用

例子

class Person {
    // 定义eat() 方法
    private eat(food:string):void {
        console.log("吃",food)
    }

    sleep():void {
        console.log("睡觉")
        this.eat("肉包子") // 可以在当前类中调用 private 修饰的方法
    }
}

测试:

const zhangsan = new Person()

// 执行报错,不能通过对象调用 private 修饰的方法
// zhangsan.eat("肉包子")
zhangsan.sleep()

例子2

定义子类,继承 Person 类:

class Student extends Person {

    study(lesson:string): void {
        console.log("学习",lesson);
        // this.eat("苹果") // 不能在子类中调用父类的 private 方法
    }
}

测试代码:

const lilei = new Student()

lilei.sleep()
// 执行报错,不能通过对象调用protected修饰的方法
// lilei.eat("红烧肉") 
lilei.study("HTML")

原文出处:/show_1GW1xjEFEsDZ.html