java 封装

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节
简单说,封装就是将属性私有化,提供公有的方法访问私有属性。
为什么要将属性私有化呢?下面我们来举个例子:

首先创建一个简单的Person类

class Person {

  String name;
  int age;
  void print(){
    System.out.println("name:"+name+"\nage:"+age);
  }
}

然后在main方法里调用

public static void main(String[] args) {
  Person p = new Person();
  p.name = "john";
  p.age = 18;
  p.print();
}

显然输出结果为:

name:john

age:18

但是,万一一不小心给age赋值成了180呢?虽然在语法上不会产生错误,但这是不合理的。通过封装就可以对age的取值做一个限定。现在,我们把Person类里的属性私有化

private String name;

private int name;

私有化之后,外部就无法调用这些变量了,但是不能调用这些变量的话类的存在也就没什么意义了,所以,我们需要让外部可以通过另一种途径来访问类的成员变量,但是又要对外来者的获取轨定限制。

通过get和set方法将2个属性封装起来。

public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getAge() {
  return age;
}

public void setAge(int age) {
  if (age <= 0 || age > 100) {
    this.age = 1;
  } else {
    this.age = age;
  }
}

这样就防止了我们设置一些不符合情理的值。也就避免了外部随意地获取类里面的成员变量啦。

之前看过一个例子,也很形象。

class Man
{
  private String name;
  private int age;
  private Woman wife;
  public void setWife(Woman wife) {
    this.wife = wife;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
   }
 }
class Woman {
  private String name;
  private int age;
  private Man husband;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public Man getHusband() {
    return husband;
  }
  public void setHusband(Man husband) {
    this.husband = husband;
  }
}
 
仔细观察这段代码,就可以发现Man类中并没有提供getWife()的方法,因为wife这个变量并不想被外界获取到。通过封装就可以很好对外界获取属性进行控制。

 转载注明出处http://www.cnblogs.com/epilogue/p/5672031.html 

posted @ 2016-07-14 22:56  Epilogue  阅读(235)  评论(0编辑  收藏  举报