Java中的封装与隐藏

前言

       我们知道,面向对象有三大特征:封装、继承、多态 。这次我们来讲讲三大特征中的封装。

1、问题的引入

       当我们创建一个类的对象之后,我们可以通过 “ 对象.属性 ”的方式,对对象的属性进行赋值,如下所示,这时的属性只受到数据类型和存储范围的限制而已

			Teacher t = new Teacher();
			//我们可以通过“ 对象.属性 ”的方式直接赋值
			t.age = 22;

       但是我们知道在实际的问题中,还有其他的限制条件,如年龄不能是负数,密码长度不能超过几位等等。而 要添加这些额外条件就需要通过方法来实现进行添加 。比如我们在 Teacher 类中添加 setAge( ) 方法来实现额外限制条件。

	class Teacher{
		int age;	//年龄
		
		//额外添加的限制条件	
		public void setAge(int a) {
		if(a<=0) {
			age = 0;
		}else {
			age = a;
		}
	}

       设置完后,可通过 “ 对象.方法 ” 的方式进行调用。

	t.setAge(22);

       但是如果我们没有将原有的属性设置为 private 的话,用户还是可以通过 “ 对象.属性 ”的方式对对象的属性进行赋值,如下。

	t.age = -1;

       年龄是负数,这显然是不对的,因此当我们设置完方法来添加额外限制条件时,还要 把原有的属性设置为 private ( 私有的 ) 。这样才能防止用户再次通过 “ 对象.属性 ”的方式对对象的属性进行赋值,从而保证赋值方式的唯一性。

	private int age;

       因为用户无法再通过通过 “ 对象.属性 ”的方式对对象的属性进行直接赋值,此时,针对于属性就体现了封装性,该属性对用户隐藏了 。这就是封装与隐藏。隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,就是把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

2、如何体现封装

       封装性的体现有很多种方式,常见的方式如下:

       ①将类的某个 xxx 属性设为 private 后,通过 public 的 setXxx( ) 和 getXxx( ) 方法分别进行设置和获取
       ②将类中的某个方法 private 化,只在类的内部进行使用,不对外开放。
       ③单例模式

       在上述的例子中,我们已经设置了 setAge( ) 方法,所以还需要 getAge( ) 方法来使用户有办法查看该属性的值。

	class Teacher{
		//获取
		public int getAge() {
			return age;
		}
	}

       至此,第 ① 个方式就实现啦,下面是完整的代码。

	public class EncapsulationTest {
		public static void main(String []args) {
			Teacher t = new Teacher();
			t.setAge(22);
			/* 
		 	* 我们虽然调用了方法,但是如果没有把该属性设为 private , 
			 * 用户依旧可以通过下列方式给属性赋值,年龄是负数显然是不对的,	
			 * 所以要记得把属性设为 private。
			 * 设为private后下列语句会报 The field Teacher.age is not visible 的错误,
			 * 就是说该属性对用户隐藏了,这就是封装与隐藏
			 */
	//		t.age = -4;	
			t.show();
			System.out.println(t.getAge());
		}
	}

	class Teacher{
		private int age; //属性私有,封装与隐藏
	
		public void show() {
			System.out.println("Teacher's age is " + age + ".");
		}
	
		//这是添加额外限制条件的方法,是设置
		public void setAge(int a) {
			if(a<=0) {
				age = 0;
			}else {
				age = a;
			}
		}
	
		//获取
		public int getAge() {
			return age;
		}
	}

3、权限修饰符配合封装性

       可以看到,在封装性的体现中需要权限修饰符来配合,如 private 的属性,public 的 setXxx( ) 和 getXxx( ) 方法。而在 Java 中有 4 种权限修饰符。

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

       ②4 种权限可以用来修饰类及类的内部结构,其中,4 种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类,但是修饰类的话, 只能使用:缺省、public

       ③用不同的权限修饰符修饰的类或内部结构,什么时候可调用如下:

修饰符类内部同一个包不同包的子类同一个工程
private可用
缺省可用可用
protected可用可用可用
public可用可用可用可用

        以上笔记供大家学习交流,如有错误,欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiden_Davis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值