1.前言
我们在学习时,参考别人项目时会碰到像这样的一些代码:
package cn.edu.nuist.testSystem.beans;
import java.io.Serializable;
/**数据库User表的bean类
* 用以表示该表的各个字段信息
* @author Timlong
* @version V1.0
*/
@SuppressWarnings("serial")
public class Users implements Serializable{
private int id;
private String username;
private String password;
private boolean active;
/**
* 该类的无参构造方法
*/
public Users() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return username;
}
public void setUserName(String userName) {
this.username = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
/**
* 返回该bean的数据信息
* @param none
* @return 数据信息字符串
*/
public String toString(){
String re;
re = "ID: " + this.getId()
+ "\nUser Name: " + this.getUserName()
+ "\nPassword: " + this.getPassword()
+ "\nIs Actived? " + this.isActive();
return re;
}
}
里面有一系列的变量,还有修饰符修饰,还有一系列的getter()和setter()方法,今天,我们就来谈一谈这些东西!
2.具体概念
java有三大特性:封装、继承和多态!今天要讲的就是封装!
首先,属性可用来描述同一类事物的特征,方法可描述一类事物可做的操作。封装就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。
2.1概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
2.2好处:(1)实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。(2)隐藏信息,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。
而我们在设置变量的属性时,我们通常会对数据进行封装,这样就可以增加了数据访问限制,增加了程序可维护性。而实现方法就是:用private去修饰一个变量,然后再用setter方法去设置该变量的值,然后在用getter方法去调用该变量的值。
用setter来改变数据成员的值时,操作必须由这个对象自己来触发
用public来改变数据成员的值时,操作可以由任何对象来触发
这是面向对象的封装,总之就是自己的数据成员,只对自己可见,也只有自己才能改变其值
对象的封装性,
private的只有对象自己才可以访问,其他任何对象不行,包括它的子类和父类。安全性高,其他对象只能通过它的public方法,set,get来获取或设置原对象的private属性。
public其他对象可以访问,安全性就不高了。
/*问题:在java 类中使用getter和setter的好处?
* 定义为private 是为了实现数据的隐藏和封装;而set get 方法提供了类与外部的接口;在大型软件中这是很有必要的,它有利于代码的维护。
举个例子,一个父类有多个子类(甚至还有间接子类),程序代码中,子类是不能直接访问父类的private属性的;这时提供的set get方法是很有必要的。诚然,若将父类的属性声明为protected,在子类中就可以直接访问了,但是这种方法破坏了数据的隐藏和封装原则,关键是不利于代码的维护,
如果父类中的一个属性改名了,那么在子类中用到该属性名的代码,要发生大范围的修改,而前面的private,set,get方法就比较好,对代码只需小范围的修改,一般都是这么用的,这是一个良好的编程习惯*/