java三大特性-------------------封装
JAVA三大特性之封装
封装从字面意义上来说就是包装的意思,专业一点就是信息隐藏,就是利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立整体。数据被保护在抽象数据类型的内部,尽可能的隐藏整体内部细节,只保留一些对外接口(这些接口可能是接口也可能是interface也可能事一些对外的方法)与外部联系。系统的其他对象只能通过包裹在外面已经授权的操作来与这个封装对象进行交互。也就是说用户无需知道对象内部细节(某些大神是可以找到的),但可以通过该对象对外提供的接口访问指定的对象方法。
对封装来说,一个对象封装的是自己的属性和方法,所以他不需要依赖其他对象就能完成自己的操作。
封装的几点好处:
1.良好的封装可以有效的减少耦合;
2.在封装内部可以自由修改;
3.可以对封装成员进行更为精确的控制
4.隐藏实现过程,只暴露想要暴露的东西。
我把封装理解成是我们住的房子,里面的家具就是我们对象的属性和方法。漂亮的装饰是私有物品,如果没有墙遮挡,别人就会一览无余,毫无隐私可言。可是如果一栋房子全都用墙围住了,那这个房子再好看又有什么意义呢?所以我们给房子开了门和窗(也就是接口和一些对外方法);下面用几个例子讲讲封装的好处!!!
例子1:
public class Person{
private int age;
private String name;
private Dog dog;
public int getAge(){
retuen age;
}
public void setAge( int age){
this.age=age;
}
public String getName(){
return name;
}
public void setName(String name)
this.name=name;
}
public Dog getDog(){
return dog;
}
public void setDog(Dog dog){
this.dog=dog;
}
这是一个普通到不能再普通的封装类了,但是如果我们不封装会是什么情景:
public class Person{
public int age;
public String name;
}
public class Test(){
Person.age=30;
Person.name="jack";
}
乍一看,下面不封装的比上面的封装的简单许多。但你想过没有,如果在多出地方用到了Person这个类,这时候你想将age这个变量的属性由int变成String这该怎么办,岂不是要改死。
这时候回头再看封装的类
我们只需要将封装类中的setAge()方法稍微修改一下就好了
public void setAge(int age){
this.age=String.valueOf(age);
}
这样我们其他地方引用person.setAge(30);是不需要变化的
我们可以看出:封装可以让我们更好的修改内部实现,无需修改该对象客户代码。
对成员变量更为精确的控制。
我们还可以通过修改set方法,实现一些更符合我们现实生活的方法。还拿age来说,我们可能因为疏忽,将年龄写的很大(这就成了老妖怪了)。这时候我们就可以在set方法中加上一个判断条件
public void setAge(int age){
if(age>150){
System.out.println("这人是个老妖怪!");
}else{
this.age=age;
}
例子2:
还有就是我们项目过程中的接口:
在项目中 dao ,service 中都将方法和方法的实现通过接口分隔开:在接口中我们只能看到一个个的抽象方法,看不到抽象的实现。还有就是在资源注入的时候有这样的一个情况:
@Resource
private IBookDao bookdao;
这里我们用的是IBooDao 而不是BookDao 这也体现了封装的特性。BookDao中有对抽象方法的实现,我们是看不到的,我们只能看到暴露在外面的接口
我刚学java没多久,我对封装的理解就这些,希望对新人有帮助,大神看了不要笑话,希望给点批评建议。么么哒!!!!!