如何理解封装的好处?

SilentHunter460 2020-01-17 10:45:09
radius变量private,虽然不能用test.radius修改radius,但还不是得留下setRadius方法给用户修改radius变量。
本来自己伸手就可以开门,非得设计一个机器人帮忙开门。 这个程序太短小体我会不到好处,请问大型程序是否就很有必要?


public class main1 {
public static void main(String[] args) {
circle test = new circle();
}
}

class circle {
private double radius = 1;

public void setRadius(double theradius) {
this.radius = theradius;
}
}
...全文
698 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ctrl精 2020-01-25
  • 打赏
  • 举报
回复
考虑过安全问题么
JavaPorter 2020-01-19
  • 打赏
  • 举报
回复
几行代码你是体会不到封装的好处的 项目越大,代码量就越多,有的几千几万行代码都是正常 在代码变多的基础上,使用封装,才能够提高一些代码的复用性,像一些功能型的和通用配置型的代码最好采用封装,不仅提高了代码的可读性,还能在下次使用这些功能和配置的时候直接复用,方便简洁
走好每一步 2020-01-19
  • 打赏
  • 举报
回复
引用 楼主 qq_16774199 的回复:
radius变量private,虽然不能用test.radius修改radius,但还不是得留下setRadius方法给用户修改radius变量。 本来自己伸手就可以开门,非得设计一个机器人帮忙开门。 这个程序太短小体我会不到好处,请问大型程序是否就很有必要?

public class main1 {
	public static void main(String[] args) {
		circle test = new circle();
	}
}

class circle {
	private double radius = 1;

	public void setRadius(double theradius) {
		this.radius = theradius;
	}
}
10几个文件中,共几十处出现setRadius, 10几个文件中,共几十处出现circle.radius = radius ; 有一天,你客户说这个赋值要打个折,应该是 circle.radius = 80% * radius ; 封装了改个设置函数就可以了,没封装得改几十处。 其实写程序没有定式,并不能说circle.radius = radius 是错的,主要它符合使用场景 只是说改成setRadius函数可维护性更强一些
weixin_44016056 2020-01-18
  • 打赏
  • 举报
回复 1
封装的好处挺好理解的。 就拿电视机举例嘛,拿个箱子包装起来,你只需要会开电视,会调声音,会转台就好了。里面的一系列操作你不需要懂,只要知道按开关键,会开机,这样是方便用户使用。封装好的方法知道传什么参数,返回什么就能够使用了。 第二个呢,封装好,不让你直接操作里面的东西,免得不懂得人弄坏了。 第三个呢,当电视机坏了,那么就有专业人士打开箱子,维修里面得东西。就像我们的程序有需求能重写方法,但是你的程序用户不能够修改你的东西。
sunyiz 2020-01-17
  • 打赏
  • 举报
回复
你的这个例子里,set 方法只是简单的赋值,所以你体会不大出来

你可以设想这样一个场景:
每一次改变 radius 值时,需要同时更新对一些和它相关的其它属性的值,
那么如果你没有 set 方法,而是都是直接赋值的
那么你在你所有对 radius 的地方,都要加上大量的更新其它相关属性的代码
但是如果你写了 set 方法,其它地方也都是通过 set 方法来赋值的
那么,如果你有需要更新的其它相关属性,只要在 set 方法中加上就行了
「已注销」 2020-01-17
  • 打赏
  • 举报
回复
安全也是一方面,go简化了面向对象,它默认程序员应当自己保证安全性,所以没那么喜欢封装,java见类就封
qq_39936465 2020-01-17
  • 打赏
  • 举报
回复
引用 楼主 qq_16774199 的回复:
radius变量private,虽然不能用test.radius修改radius,但还不是得留下setRadius方法给用户修改radius变量。 本来自己伸手就可以开门,非得设计一个机器人帮忙开门。 这个程序太短小体我会不到好处,请问大型程序是否就很有必要?
封装是java 程序的特色,个人理解封装后可以在set get中添加校验,而不像直接赋值可能会产生逻辑错误。还可以对方隐藏赋值的计算过程既提高安全性,又增加耦合性。 这个是java 的基本特性,实在不懂百度一下吧。
「已注销」 2020-01-17
  • 打赏
  • 举报
回复
因为接口一般不会轻易改变,而细节容易改变,封装就相当于划了一条分界线,防止牵一发而动全身 举个例子,把radius改为string类型,如果封装了,那么直接改一下set和get方法即可,如果没有封装,每个用到的地方都得转换一下 话说java可能真是最喜欢封装的了
SilentHunter460 2020-01-17
  • 打赏
  • 举报
回复
引用 5 楼 qybao 的回复:
用set,可以在赋值前判断参数是否有效,做一些相关check(比如你直接伸手开门,门外是个杀手,你就直接挂了,如果用机器人,可以抵挡甚至把杀手ko掉) 另外,多线程时,有时需要考虑线程安全,可以方便加上同步 如果你单独的调用属性赋值,上面所有的这些你都要在每次赋值时都做一遍,代码冗余,也容易遗漏出错 所以适当的封装是有一定的意义的
谢谢。你这个例子很形象,一两个门无所谓,100个门就挺麻烦。
qybao 2020-01-17
  • 打赏
  • 举报
回复 1
用set,可以在赋值前判断参数是否有效,做一些相关check(比如你直接伸手开门,门外是个杀手,你就直接挂了,如果用机器人,可以抵挡甚至把杀手ko掉)
另外,多线程时,有时需要考虑线程安全,可以方便加上同步
如果你单独的调用属性赋值,上面所有的这些你都要在每次赋值时都做一遍,代码冗余,也容易遗漏出错
所以适当的封装是有一定的意义的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧