文章目录
  1. 1. 访问控制符

隐藏和封装

封装是面向对象的三大特征(另两个是多态和继承),封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。其目的是:

  • 隐藏类的实现细节
  • 使用时只能通过事先预定的方法来访问数据,限制不合理的访问,符合设计逻辑
  • 进行数据监测,保证对象信息的完整性
  • 便于修改提高可维护性

    访问控制符

    Objective-C提供了4个访问控制符@private@package@protected@public
  • @private(当前类访问权限) 只能在当前类的内部访问,在类的实现部分定义的成员变量默认使用这个访问权限
  • @oackage(与映像访问权限) 可以在当前类以及当前类实现的同一个映像的任意地方访问
  • @protected(子类访问权限) 可以在当前类和当前类的子类的任意地方访问,在类的接口部分定义的成员变量默认使用这种访问权限
  • @public(公共访问权限) 可以在任意地方访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    @interface Person : NSObejct
    {
    @private
    NSString* _name;
    int _age;
    }
    - (void)setName:(NSString *)name;
    - (NSString *)getName;
    - (void)setAge:(int)age;
    - (int)getAge;
    @end

    @implementation Person
    - (void)setName:(NSString *)name
    {
    if([name length] > 6 || [name length] < 2)
    {
    return;
    }
    else
    {
    _name = name;
    }
    }
    - (NSSting *)getName
    {
    return _name;
    }
    - (void) setAge:(int)age
    {
    if(age != _age)
    {
    if(age > 100 || age < 0)
    {
    return;
    }
    else
    {
    _age = age;
    }
    }
    }
    - (int) getAge
    {
    return _age;
    }
    @end

Java中也提供了4个访问控制符privatedefaultprotectedpublic

  • private 提供了类内部的访问权限
  • dufault 是默认的权限,同一包中和类内部可以访问
  • protected 提供了同类,同包和子类的访问权限
  • public 提供了外部访问权限,即可再任意地方访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class Person{
    private String name;
    private int age;

    public void setName(String name){
    if(name.length() >6 || name.lenth()<2){
    return;
    }else{
    this.name = name;
    }
    }
    public String getName(){
    return this.name;
    }
    public void setAge(int age){
    if(age > 100 || age < 0){
    return;
    }else{
    this.age = age;
    }
    }
    public getAge(){
    return age;
    }
    }

隐藏的目的是为了封装类,达到程序的模块化,实现高内聚(功能实现细节在模块内部完成,不允许外部干预),低耦合(尽量少地暴露方法给外部使用)

文章目录
  1. 1. 访问控制符