理解面向过程三大特征之一——封装性

在Java SE的学习中,我们会遇到一个概念——封装性。这个词,应该都不陌生,甚至经常会听到,那到底什么是封装性呢?

首先,我们应该了解到 面向对象的三大特征——封装、继承、多态

我们在设计程序的时候,要追求“高内聚,低耦合”

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
  • 低耦合:仅对外暴露少量的方法用于使用

 那封装性其实也就是 隐藏对象内部的复杂性,最对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想


如何更生动的理解呢?

这时候,理解起来还是很抽象吧。那就举个例子,比如说,我们买了一台洗衣机,那它的功能我们都知道,有 放水,洗涤,脱水等等。并且功能按键直接在机子外部就显示出来了,我们要执行那个功能,就点相应的按钮即可。那至于其中的运行逻辑和运行组件,我们有必要去了解吗?那当然没必要,我又不去搞什么抽水泵,发动机啥的,我要知道那玩意儿干啥(狗头保命)。所以,这里就有一点封装的概念在里面。把那些复杂的组件和接口连线等等全封装在机箱里,对外呢,只暴露功能按键。我们要执行那个功能,就按下按键,由此来驱动内部的组件运行完成操作。

那这样做有啥好处呢?

  • 可以化繁为简吧,想想看,如果一台洗衣机没有外壳的封装,里面光秃秃的几个零件搭建在一起,想想都头皮发麻,说不定拿到手里还得捣鼓好半天。
  • 可以便于用户的使用,那些不懂得各个零件怎么操作的,没事儿!我有按钮!哪里想用就点哪里(简直有手就行)
  • 另外,也更加安全了。想想看,那些零件不经过封装,暴露在外面,要是一不小心路过的时候踢了一脚,会不会散架?(嘿嘿)所以把它们封装起来使得内部各元素更安全
  • 等等

所以,我们也不难由此得出 封装性 的优势:便于使用;提高安全性;提高重用性...


那封装性如何体现呢?

我们将类的属性私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。

当然这只是一种体现方式,并且这只是体现哦,并不等同于 “封装性”。此外,还有不对外暴露的私有方法、单例模式等等。

这里引入了private、public这几个权限修饰符。所以,封装性的体现,需要权限修饰符来配合。 

1、java规定的的4种权限    (从小到大排列):private、缺省、protected、public

​2、4种权限可以用来修饰类及类的内部结构: 属性、方法、构造器、内部类

​3、具体的: 4种权限都可以用来修饰类的内部结构: 属性、方法、构造器、内部类

​                     修饰类的话,只能用: 缺省、public

 

 

public class AnimalTest {
	public static void main(String[] args) {
		
		Animal a = new Animal();
		a.name = "大黄";
		a.age = 1;
//		a.legs = 4; //字段 Animal.legs 不可视 (private)
		
		a.show();
		a.setLegs(-6);
		
		a.show();
		System.out.println(a.name);
//		System.out.println(a.legs);  同样也没办法单独的输出legs
		System.out.println(a.getLegs()); //由get方法来获取数据
	}
}

class Animal{
	String name;
	int age;
	private int legs;	//腿的个数
	
	//对属性的设置
	public void setLegs(int l) {
		if(l>=0 && l%2==0) {
			legs = l;
		}else {
			legs = 0;
		}
	}
	
	//对属性的获取
	public int getLegs() {
		return legs;
	}
	
	public void eat() {
		System.out.println("动物进食");
	}
	
	public void show() {
		System.out.println("name=" + name + ",age=" + age + ",legs=" + legs);

	}
}

在上述代码中,在Animal类的属性定义中,把legs设为了私有(private),并提供了公共方法set和get来设置和读取动物腿的数量。既然已经设为了私有,那我们如果直接对legs进行赋值,肯定是不可以的。如 a.legs = 4; 这是会报错的。必须调用set方法进行赋值,输出时也不能直接syso(a.legs),而是要syso(a.getLegs())。


总结:

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

Java提供了4种权限修饰符,来修饰类及类的内部结构,体现了类及类的内部结构在被调用时的可见性的大小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值