面向对象三大特征——封装

1 篇文章 0 订阅
1 篇文章 0 订阅

        封装(Encapsulation)是面向对象三大特征之一(封装、继承、多态),它指的是将对象的状态信息隐藏在内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

        对一个类或对象实现良好的封装,可以实现以下目的:

   隐藏类的实现细节。
   让使用者只能通过事先预定的方法访问数据,从而可以在该方法里加入控制逻辑,限制对属性不合理访问。
   可进行数据检查,从而有利于保证对象信息的完整性。
   便于修改,提高代码的可维护性。


     

    为了实现良好的封装,需要从两个方面考虑:

1. 将对象的属性和实现细节隐藏起来,不允许外部直接访问。
2. 把方法暴露出来,让方法来操作或访问这些属性。

       访问控制符的使用总结:

 类中绝大部分属性应该使用private修饰,除了一些static修饰的、类似全局变量的属性,才考虑使用public修饰。
 有些方法只是用于辅助实现该类的其他方法,这些方法被称为工具方法,也应用private修饰。
 如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。
 希望暴露出来给其他类自由调用的方法使用public修饰。
 顶级类通常都希望被其他类自由使用,所以大部分顶级类都使用public修饰。

Person类的封装案例

package day05;

public class Person{

	public String name;
	protected String sex;
	int age;
	public String cardId;
	
	//Object(){}
	public Person(){
		System.out.println("---Person的构造器------");
	}
	
	public void study(String name){
		
	}

	/**
	 * 与父类中方法 完全一致(指的什么一致)
	 */
	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age
				+ ", cardId=" + cardId + "]";
	}
	
	
}

/**
 * 非私有的属性
 */

2.Student继承Person类的实现

package day05;

/**
 * student 子类
 * Person 父类
 * @author yaohongbo
 *
 */
public class Student extends Person{
	public String cardId;
	
	private String school;

	public Student() {
		//card赋值
		//super.cardId="0x111111";
		this.cardId="0xxxxxx111";
		System.out.println("----Student构造器-----");
	}
	
	
	public String getCardId(){
		return cardId;
	}
	
	public static void main(String[] args) {
		Student stu = new Student();
		System.out.println(stu.cardId);
	}
	
		@Override
	public String toString() {
		return "Student [cardId=" + cardId + "]";
	}

	
}

//学生  和 人 是什么关系   现实中 //查证  is kind of
//is a
//学生 是人的一种表现形式
//汽车Car  宝马汽车

2.创建测试类

package day05;

public class Test {

	public static void main(String[] args) {
		
		Student stu = new Student();
		/*stu.name="陈红军";
		stu.age=28;
		stu.sex="女";*/
		
		//System.out.println(stu.getCardId());
         //理解修饰符的访问权限 
         //理解变量隐藏
         //理解内存分配的过程		
		String temp = stu.getCardId();
		
		System.out.println(temp);
		
	}
}


对于class的权限修饰只可以用public和default(缺省);

    Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
1.隐藏一个类中不需要对外提供的实现细节;
2.使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
3.便于修改,增强代码的可维护性;



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值