面向对象的三大特性分别是封装、继承、多态。
封装是指:对象的外部对对象的 内部起到保护的作用,也称为数据隐藏。内对外也没有影响
封装就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节
任何对象都要有一个明确的边界,
封装的实现:
Public 公开的,不受边界约束
Private 私有 只能在本类内部访问,无法突破边界
属性私有,提供公开的set()方法和get()方法来访问属性;
为什么要有set和get方法:
相当于开两个门,修改和获取两个门(门可控制开关);
如果设置成public,相当于全部公开,没有任何权限,谁都可以访问,而设置成私有的之后相当于设立一个门,可控制这个属性的值怎么获取;
方法公开:
声明公开,实现隐藏;
实现的改变对架构的影响最小
例如下列程序中,银行卡密码如果不设置为私有变量的话那个谁都可以获取打密码并且进行修改,所以必须把密码设为私有变量,
但是私有变量只能在本类内部访问,无法突破边界,所以要想再获取找回密码并且修改应该怎么办呢?
所以就定义一个公开的get()和set()方法来供程序调用,相当于从public的没有边界到private 的封装边界中打开两个门,一个门是负责get()获取属性的值,另一个门set()方法设置属性的值;
例如下面的程序:
public class fengz{
//封装的实现
public static void main(String[] args) {
//例如创建一个银行卡
Card card = new Card();
//如果不定义私有变量,就可以从下面这句代码获取到password 的值
//System.out.println(card.password);
//private属性私有,提供公开的set()方法和get()方法来访问属性;
System.out.println(card.getPassword());
card.setPassword ("54321") ;
System.out.println(card.getPassword());
}
}
class Card{
//public String password = "abcdefg";
private String password = "123546";
//get 和 set 方法
//方法私有,只能在本类中调用;
public String getPassword(){
return password;
}
public void setPassword(String password){
//使用set方法的好处,可控制这个属性的值怎么获取;例如果密码的长度不等于6位则返回;
if (password.length!=6) {
return;
}
this.password= password;
}
}