java 三大特性之封装

我们都知道,java的三大特性,也就是面向对象的三大特性    :封装 继承 多态

封装分为属性的封装和方法的封装,那么封装的特性是什么的?为什么我们需要进行封装? 我们先看下面的例子

public class DepositCard {

	String type;

	String cardNumber;
	
	String password;

	public DepositCard(String type, String cardNumber, String password) {
		super();
		this.type = type;
		this.cardNumber = cardNumber;
		this.password = password;
	}
	
}

public class TestCard {
	
	public static void main(String[] args) {
		DepositCard depositCard = new DepositCard("招商银行","60011.....","123456");
		String pwd = depositCard.password;
		System.out.println(pwd);
		pwd = "111111";
		System.out.println(pwd);
	}
}
运行结果、
<pre name="code" class="java">123456
111111

 上述代码,我们设计了一个银行储蓄卡类,它自身有一些,卡的种类,卡的账号,卡的密码这些特性,通过它的有参构造在创建实例的时候赋予这么属性。 

程序运行 第一步,我们先通过有参构造创建了一个实例,创建的这张银行卡,是

招商银行
卡号为
60011.....

密码为

123456
,接下来直接修改了这张银行卡的密码,OK 从java语法来说没什么问题,但从咱们生活角度来看就有很大问题,对于一张银行卡来说,它的密码是不应该被随便访问和修改,像生活中哪怕我们要修改自己的银行卡密码,也需要去银行办理一些手续。所以在java 面向对象中解决这个问题,采用封装的特性,任何对象都有一个明确的边界,这个边界对对象内部一些属性和方法起到保护的作用

语法:

1.属性的封装  

为属性增加 private (私有) 修饰符 ,指只能在本类内部使用; 在项目开发中,除非是像常量类 ,工具类 这些我们需要让它们全类共有的,一般的javaBean 我们都会加上private 并且提供get/set方法

public class DepositCard {

	private String type;

	private String cardNumber;
	
	private String password;

	public DepositCard(String type, String cardNumber, String password) {
		super();
		this.type = type;
		this.cardNumber = cardNumber;
		this.password = password;
	}

	/** 
	 * 返回 #{bare_field_comment}
	 *  
	 * @return #{bare_field_comment} 
	*/
	public String getType() {
		return type;
	}

	/** 
	 * 设置 #{bare_field_comment}
	 *  
	 * @param type 
	 *            #{bare_field_comment} 
	 */
	public void setType(String type) {
		this.type = type;
	}

	/** 
	 * 返回 #{bare_field_comment}
	 *  
	 * @return #{bare_field_comment} 
	*/
	public String getCardNumber() {
		return cardNumber;
	}

	/** 
	 * 设置 #{bare_field_comment}
	 *  
	 * @param cardNumber 
	 *            #{bare_field_comment} 
	 */
	public void setCardNumber(String cardNumber) {
		this.cardNumber = cardNumber;
	}

	/** 
	 * 返回 #{bare_field_comment}
	 *  
	 * @return #{bare_field_comment} 
	*/
	public String getPassword() {
		return password;
	}

	/** 
	 * 设置 #{bare_field_comment}
	 *  
	 * @param password 
	 *            #{bare_field_comment} 
	 */
	public void setPassword(String password) {
		this.password = password;
	}
}
我们通过get() 方法来获取password属性,通过set()方法来设置属性

public class TestCard {
	
	public static void main(String[] args) {
		DepositCard depositCard = new DepositCard("招商银行","60011.....","123456");
		System.out.println(depositCard.getPassword());
		depositCard.setPassword("111111");
		System.out.println(depositCard.getPassword());
	}
}
这个就可以来控制他人对对象的访问,例如,我们要求密码只能查看不能修改,只需提供get() 方法不提供set() 方法来保证 "只读",或者我们要求修改的密码必须为6位,可以在set() 方法做手脚

public void setPassword(String password) {
	if(password.length()!=6){
		throw new RuntimeException("密码长度必须为6");
	}
	this.password = password;
}

public class TestCard {
	public static void main(String[] args) {
		DepositCard depositCard = new DepositCard("招商银行","60011.....","123456");
		System.out.println(depositCard.getPassword());
		try {
			depositCard.setPassword("1111111");
		} catch (Exception e) {
			System.out.println("设置密码失败   :    "+e.getMessage());
		}
		System.out.println(depositCard.getPassword());
	}
}
运行结果:
123456
设置密码失败   :    密码长度必须为6
123456
2.方法的封装

也是在需要封装的方法上增加 private修饰符,例如我们设计一个teacher类

public class Teacher {
	
	public void teaching(){
		System.out.println("提供教学~~~~~~");
	}
	
	private void eat(){
		System.out.println("吃东西~~~~~~~~");
	}
}
对外暴露了教学的方法,是提供给别人调用的,eat() 不需要暴露出去只是自己使用,在项目中,像一个类中 抽出来的公用代码,我们一般直接private 修饰,不对外暴露。

注:private修饰的方法是不能被继承的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值