您的位置:首页 > 编程语言 > Java开发

java面向对象三大特征之封装

2016-04-17 15:49 393 查看
封装就是将一个对象私有化,提供对外的访问接口,完成相应的操作。

举个例子:现在有一个房子,装修完成后里面有各种的家电、家具,这个房子就相当于一个对象,如果不将其封装,那房子里面的

东西任何人都能看见,在java中就是类中的任何对象都能被访问到,那这样也太不安全了吧?由此,引出了封装的概念,我们将其

内部的属性私有化(private),这样这个房子就相当于一个很密闭的空间,里面的所有东西都看不见,但是这样是不是相当于没

有了窗户呢?由此,我们需要给它一扇窗户,也就是在类中设置getter/setter方法,用于访问我们想让其他人看见的属性变量,

这样,这个房子才是安全的,当然,也可以设置一些方法,比如开门,开灯啊,对比在类中就是一些成员方法,使这个房子可以居住。

最终一个可以居住、安全的房子完成了,即一个封装就完成了。

下面就介绍下封装:

1.怎么封装?

(1)属性私有(private),保证数据安全

(2)提供相应的构造器(即构造方法,作用是为了给属性赋值,在初始化时起作用)

(3)提供相应的设定器和访问器(即getter和setter方法,根据实际需要,将一些属性暴露出来可以修改访问)

(4)功能方法(需要根据功能需要编写相应的方法)

2.封装有什么好处?

(1)提高代码的重用性,从而提高项目的开发效率。

举个例子:对我们人都有身高,体重,年龄这些属性,然后就可以将其封装成一个Person类,男人和女人都有着三个属性,然后还

有自己独特的属性,比如男人有妻子,女人有丈夫等,现在我们需要写一个Man和Woman类,不需要再各类中都重新写年龄、身高、

体重这些属性,只需要继承Person类即可(继承也是java面向对象三大特征之一,另一篇文章会详细讲解),这样就会提高代码的

重用性,同时如果在开发过程中,发现在人类还有一个属性性别也是人类共同的属性,只需要在Person类中进行修改即可,不需要

修改继承Person的子类,提高了开发效率。

(2)保证了数据安全

这个在文章开始的例子中介绍了,我们首先将所有的属性私有化,然后根据需要,提供相应的接口,比如一个人的年龄,身高,初始化后

都是不变的,不应该被修改,但是可能需要被访问到,那么只设置访问器(getter方法)即可,不需要设置setter方法。

另外,如果我们在项目中要求输入年龄age,如果将属性公有化(public),可以直接访问到然后设置,那么有可能会被误设置为-1,

public class TestPackage {

public static void main(String[] args) {
Person p1 = new Person();  //创建一个Person类的对象p1
p1.age=-1;  //将p1的属性age赋值为-1
}

}

class Person{  //Person类
int age;   //年龄
}


这种不符合实际情况的值,如上述代码,赋值过程很难被发现错误,如果属性私有化,设置setter方法赋值,就可以避免这种情况,如下:

public class TestPackage {
public static void main(String[] args) {
Person p1 = new Person();  //创建一个Person类的对象p1
p1.setAge(-1);
}

}

class Person{  //Person类
private int age;   //年龄

public void setAge(int age) {//设置年龄
if (age<0||age>200){   //首先判断年龄是否在正常范围内
System.out.println("输入年龄有误!");
}else{
this.age = age;

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: