面向对象中封装认识

今天在班上讲了封装,又是元气满满的一个周末。

二话不说,还是要化繁为简,这节的目的是整明白啥叫封装!

首先看一眼百度百科上封装的定义:

讲道理,看到这样的描述,我的人是崩溃的

首先用一个案例引入,那就是女性年龄这事,一般非妙龄少女的年龄,是不想让人知道的,比如我!

首先创建一个Girl类:

public class Girl {
	int age;
}

然后写一个测试类:

public class Test {
	public static void main(String[] args) {
		Girl g=new Girl();
		g.age=36;
	}
}

上来你就给我来个36岁,这是跟sei俩呢!我拒绝!!

那么问题来了,咋拒绝?不想让你随意糟蹋我的年龄。。解决:在age属性前加上一个修饰符private:

public class Girl {
	private int age;
}

那么测试类中,立马就报错了:

目的达到了,我这个age对你来说访问不到了!那么,此时,你该理解了,我这个age属性,对你来说,已经封装起来了,但是效果不好,为啥呢?因为对你哪些不礼貌的人,我确实需要隐藏我的年龄,但是在一些必要的场合,age这个属性也必须要提供给你用,怎么办呢?解决办法:你对我的年龄,无非就是设置值,读取值操作,那么我就给你提供俩方法,让你通过这两个方法访问到我的年龄。。

public class Girl {
	private int age;
	//设置年龄的值
	public void sheZhiAge(int age) {
		this.age = age;
	}
	//读取年龄的值
	public int duQuAge() {
		return age;
	}
}

这样你访问的时候,就可以按照下面方式访问了:

public class Test {
	public static void main(String[] args) {
		Girl g=new Girl();
		//对年龄设置值:
		g.sheZhiAge(20);//美美哒20岁
		//读取年龄的值:
		System.out.println(g.duQuAge());	
	}
}

这种方式,达到了设置,读取的目的,那么问题来了,你现在再说我是36岁可以吗?可以试一下,36岁,依旧可以设置读取。

public class Test {
	public static void main(String[] args) {
		Girl g=new Girl();
		//对年龄设置值:
		g.sheZhiAge(36);//我老了
		//读取年龄的值:
		System.out.println(g.duQuAge());	
	}
}

恩?可以设置读取???那折腾这么多干嘛?

答:之所以这样做,是因为,这个设置读取的方法是我给你提供的,那么既然是我提供的,我怎么写就是我的事了!那么我就可以加限制了!我将其中的设置年龄的方法改为:

//设置年龄的值
	public void sheZhiAge(int age) {
		if(age>=30){
			this.age=18;
		}else{
			this.age = age;
		}
	}

加了上面的限制,你再问是不是36岁的时候 ,那么返回的值就是18了!

那么上面,我们完成了对age属性的封装,终于明白 ,啥叫封装了。

总结一句话,你访问的有限制,不随意,对你来说,都是封装!

那么在实际写代码过程中,我们对于上述的两个设置值,读取值的方法,我们一般都定义为set,get方法:

public class Girl {
	private int age;
	//设置年龄的值
	public void setAge(int age) {
		if(age>=30){
			this.age=18;
		}else{
			this.age = age;
		}
	}
	//读取年龄的值
	public int getAge() {
		return age;
	}
}


另外说一嘴,有些人常说,private就是封装。这句话是错误的。上面我们虽然用到了private,但是private只是我们加的一个修饰符,只是用来控制权限的其中一种方式而已,稍后有机会我再更新java中的权限修饰符!bye~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值