为毛你能@到我但帖子里没看到哪里@了(
本帖最后由 CustomStuff 于 2016-6-15 23:57 编辑
噗看到问题了,我尽可能用大家听得懂的话来说。。
其实你问的是两个问题,一个是为啥要分成四种访问修饰符,另一个是getter和setter。。。
首先访问修饰符这个不是java的概念,事实上很多OO语言都有,这其实要从OO的发展来讲。
首先OO强调的是两个概念,职责与协作。(暂时不提封装、继承与多态)
所谓职责,就是一个类定义的是一组数据和在这组数据上的操作。
所谓协作,就是一系列的类的对象相互调用,完成我们想要的任务。
而封装与继承来自于职责,多态来自于协作。
当然你们可能会问写个软件不就是弄个机器码吗,为啥要这么多奇葩的东西(一堆语言,一堆设计的范式)?
事实上对于初级的程序员,需要关注的是怎么写出一个程序,然而程序语言/范式是为高级程序员准备的。
高级程序员关注的,是如何面对变更。面对变更的手段有很多,封装、继承和多态就是典型的用来面对变更的。(这也是我一直在强调的,判断代码好坏还要看代码面对新需求的能力)。
好了扯远了,来回归正题。
访问修饰符是封装的一个组成部分,封装的最终目的是为了达到功能内聚或逻辑内聚。
考虑到大部分人的英文水平,我就粘个百度的:http://baike.baidu.com/view/553710.htm
为了达到功能内聚和逻辑内聚,就需要达到一个类蕴含类中数据的所有操作,类边界以外受控制的访问类的数据,这就是封装(看清楚了,两个概念,语文要学好)。
如果类边界以外随意控制类的数据的话,最可能的结果就是破坏类数据的完整性——类:我的数据谁改的,一脸蒙蔽。
根据类边界以内和以外,可能分成私有的(private,只有自己能访问)和公有的(public,大家都能改)。
当我们引入了继承之后,我们类的边界就变得恶心了:子类属于类边界以内还是类边界以外?
于是仿照前面的思路,我们分配给子类一个受保护(protected)的访问权限。
而java有个很恶心的地方,就是它的高层模块是以包为单位的。(以满足共同封闭原则, 百度:
http://baike.baidu.com/subview/170036/6845485.htm )
因此java的设计师又异想天开地弄了个类边界以外、包边界以内的权限,叫package权限。
因此我们经常说java的访问权限从宽到严有四个级别:public、package,protected,private。
(咔,回答这个真特么降san值)
至于写成public方便嘛,我也觉得挺方便的,但也有条件,比如你觉得写getter太麻烦,就可以直接把那个字段写成public final类型。
但这么做有一个主要风险,就是面对变更的能力不好。比如你那个字段从原来的类移到了别的类去,你可能很多访问这个字段的类都要修改。
但是写成getter之后,除了这个类,别的类都不需要修改。(虽然我的个人喜好就是懒)
还没答完,关于getter和setter。
首先getter和setter的主要作用,在于:
1. 提供不存在于类的“字段”的修改和访问。比如你们经常写的圆,圆的类很可能就只存放圆的半径,但圆的类可以包含圆周长和面积的getter与setter,这是字段不可以做到的。
2. 提供数值的清洗功能。比如你要把某个有限定条件的字段改写掉,比直接修改字段,更有效的做法是利用setter进行清洗。而这种清洗也避免了分布式的修改,符合我们之前说的易于修改的要求。
噗看到问题了,我尽可能用大家听得懂的话来说。。
其实你问的是两个问题,一个是为啥要分成四种访问修饰符,另一个是getter和setter。。。
首先访问修饰符这个不是java的概念,事实上很多OO语言都有,这其实要从OO的发展来讲。
首先OO强调的是两个概念,职责与协作。(暂时不提封装、继承与多态)
所谓职责,就是一个类定义的是一组数据和在这组数据上的操作。
所谓协作,就是一系列的类的对象相互调用,完成我们想要的任务。
而封装与继承来自于职责,多态来自于协作。
当然你们可能会问写个软件不就是弄个机器码吗,为啥要这么多奇葩的东西(一堆语言,一堆设计的范式)?
事实上对于初级的程序员,需要关注的是怎么写出一个程序,然而程序语言/范式是为高级程序员准备的。
高级程序员关注的,是如何面对变更。面对变更的手段有很多,封装、继承和多态就是典型的用来面对变更的。(这也是我一直在强调的,判断代码好坏还要看代码面对新需求的能力)。
好了扯远了,来回归正题。
访问修饰符是封装的一个组成部分,封装的最终目的是为了达到功能内聚或逻辑内聚。
考虑到大部分人的英文水平,我就粘个百度的:http://baike.baidu.com/view/553710.htm
为了达到功能内聚和逻辑内聚,就需要达到一个类蕴含类中数据的所有操作,类边界以外受控制的访问类的数据,这就是封装(看清楚了,两个概念,语文要学好)。
如果类边界以外随意控制类的数据的话,最可能的结果就是破坏类数据的完整性——类:我的数据谁改的,一脸蒙蔽。
根据类边界以内和以外,可能分成私有的(private,只有自己能访问)和公有的(public,大家都能改)。
当我们引入了继承之后,我们类的边界就变得恶心了:子类属于类边界以内还是类边界以外?
于是仿照前面的思路,我们分配给子类一个受保护(protected)的访问权限。
而java有个很恶心的地方,就是它的高层模块是以包为单位的。(以满足共同封闭原则, 百度:
http://baike.baidu.com/subview/170036/6845485.htm )
因此java的设计师又异想天开地弄了个类边界以外、包边界以内的权限,叫package权限。
因此我们经常说java的访问权限从宽到严有四个级别:public、package,protected,private。
(咔,回答这个真特么降san值)
至于写成public方便嘛,我也觉得挺方便的,但也有条件,比如你觉得写getter太麻烦,就可以直接把那个字段写成public final类型。
但这么做有一个主要风险,就是面对变更的能力不好。比如你那个字段从原来的类移到了别的类去,你可能很多访问这个字段的类都要修改。
但是写成getter之后,除了这个类,别的类都不需要修改。(虽然我的个人喜好就是懒)
还没答完,关于getter和setter。
首先getter和setter的主要作用,在于:
1. 提供不存在于类的“字段”的修改和访问。比如你们经常写的圆,圆的类很可能就只存放圆的半径,但圆的类可以包含圆周长和面积的getter与setter,这是字段不可以做到的。
2. 提供数值的清洗功能。比如你要把某个有限定条件的字段改写掉,比直接修改字段,更有效的做法是利用setter进行清洗。而这种清洗也避免了分布式的修改,符合我们之前说的易于修改的要求。
107874017 发表于 2016-6-15 20:25
梨子也是小学生XD
艾玛·不可能吧··这小学生那也太有前途了···
本帖最后由 q513902026 于 2016-6-16 06:09 编辑
我要买本《Java从入门到精通》(ISBN 978-7-302-28756-8)
在看教学了_(:зゝ∠)_
在看教学了_(:зゝ∠)_
请问onEnable方法是必须要写吗?还有onLoad方法,我看别人的事例一般都加上onEnable()但什么都不写。
挖槽我好慌
黄总 发表于 2016-6-18 23:05
请问onEnable方法是必须要写吗?还有onLoad方法,我看别人的事例一般都加上onEnable()但什么都不写。 ...
所有方法都不是必须的
梨子大法好入教保平安
求主类格式复制下来。
zhangcy 发表于 2016-6-23 17:54
求主类格式复制下来。
您不适合学插件。
要是能单独推出一系列常用但是找不到教程和文档的东西的教程就好了
比如nbt nms之类的玩意儿
比如nbt nms之类的玩意儿
梨子大大,我的签名档拿去不要客气
简单明了...第二章应该是讲 注册,监听,,或者就是 spigotdoc类用法
我想做1.9的插件,用的是1.9的API,但编译出来1.9不能用,1.8能用。
学习一下
然后你的头像变了
你的人也变了
然后你的头像变了
你的人也变了
哇,这个帖子很详细哎,收藏一下。
难道只有我盯着屏幕盯了好久才理解CV大法师Ctrl+C和Ctrl+V?
当时我还奇怪?CV是什么?声优吗?
当时我还奇怪?CV是什么?声优吗?
不过对于我已经入门的人来说这些教程确实简单易懂
催更
大角虫你好
这个帖子完结了吗?是不是没有第二章了?
黄总 发表于 2016-8-6 14:34
这个帖子完结了吗?是不是没有第二章了?
第二章我在想应该怎么写。。头疼。
什么时候出第二章~
这个书号把我吓到了233
看来我的《从入门到弃坑》ISBN(978-7-302-22746-5)一定是盗版的!
不然我怎么还什么都不会!肯定是这个世界的错!
看来我的《从入门到弃坑》ISBN(978-7-302-22746-5)一定是盗版的!
不然我怎么还什么都不会!肯定是这个世界的错!
今日无事,来搞一发锟斤拷
梨子更新更新~
2个月啦还不更新{:10_498:}
2个月啦还不更新{:10_498:}
纯白剑姬 发表于 2016-8-24 21:38
这个书号把我吓到了233
看来我的《从入门到弃坑》ISBN(978-7-302-22746-5)一定是盗版的!
不然我怎么还什 ...
噗,为什么会有书叫这个名字
神の手 发表于 2016-7-22 17:43
难道只有我盯着屏幕盯了好久才理解CV大法师Ctrl+C和Ctrl+V?
当时我还奇怪?CV是什么?声优吗? ...
CV是什么?航母吗?(笑)
梨子出来。。
为什么我extends JavaPlugin后package那里就出错。。
用bukkit 1.8/1.8.8都是这样,而我用paperspigot1.8.8的就没事。。
为什么我extends JavaPlugin后package那里就出错。。
用bukkit 1.8/1.8.8都是这样,而我用paperspigot1.8.8的就没事。。
小0w0卡 发表于 2016-9-25 07:40
梨子出来。。
为什么我extends JavaPlugin后package那里就出错。。
用bukkit 1.8/1.8.8都是这样,而我用pap ...
请给出截图
小0w0卡 发表于 2016-9-25 14:11
另外,你这个帖子改更新了0w0
就是package XX.XX.XX的p下面被红色波浪线划了出来,有个错(eclipse),然后错误内容是:
The type com.avaje.ebean.EbeanServer cannot be resolved. It is indirectly referenced from required .class files
解决方法让我配置 build path。。。
請問这教學是以 1.10 為基础的嗎?
Tales 发表于 2016-9-25 16:28
請問这教學是以 1.10 為基础的嗎?
...目前为止本教程涉及的内容,是全版本通用——下至1.4.5,上至1.10。不过以后就说不定了。
andylizi 发表于 2016-9-25 16:54
...目前为止本教程涉及的内容,是全版本通用——下至1.4.5,上至1.10。不过以后就说不定了。 ...
梨子,我就是package XX.XX.XX的p下面被红色波浪线划了出来,有个错(eclipse),然后错误内容是:
The type com.avaje.ebean.EbeanServer cannot be resolved. It is indirectly referenced from required .class files
解决方法让我配置 build path。。。
很强势,不过我怎么喜欢写插件我喜欢命令方块,哪天可以用命令方块代替java就精彩了
andylizi 发表于 2016-9-25 16:54
...目前为止本教程涉及的内容,是全版本通用——下至1.4.5,上至1.10。不过以后就说不定了。 ...
好的~
順便想問一下問題! 因為我發不了貼= =
就是想做一個類似工業MOD裏的充電背包的話要怎樣做?
貼圖那邊我不知道需要怎樣畫
我只會把官方的裝備換顏色而已...
已经买了JAVA方面的书来学
不过好困难...仰望大佬
不过好困难...仰望大佬
你会Java么?很厉害!
看了这个我还是乖乖的去学习java了
梨子,你看的那本什么《java从入门到精通》是什么版的?
andylizi 发表于 2016-10-1 17:21
第三版啊
帖子里都有ISBN
。。。不明嚼梨
梨子,我觉得有生之年能看到你更新已经无望了
那么 下一章呢?


然而一年过去了,第二章还没更新,弃坑了么...
再问一下,谁有1.7及一下的API,在https://hub.spigotmc.org/nexus/#nexus-search;classname~bukkit只找到1.8及以上的,就是说1.7及一下的只能用开服核心来当API制作插件么
再问一下,谁有1.7及一下的API,在https://hub.spigotmc.org/nexus/#nexus-search;classname~bukkit只找到1.8及以上的,就是说1.7及一下的只能用开服核心来当API制作插件么
xiaohuandada 发表于 2017-7-2 22:02
然而一年过去了,第二章还没更新,弃坑了么...
再问一下,谁有1.7及一下的API,在https://hub.spigotmc.org ...
好吧没看见,那1.7一下的插件开发是要用核心当API使用么
DGK2 发表于 2016-6-15 19:42
本帖最后由 DGK2 于 2016-6-15 19:49 编辑
沙发有没有沙发奖励?
于是最近想努力一把参加第十届擂台赛, ...
梨子三年去了哪里