由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 请问protected的使用
相关主题
如何获得类定义的public methods?看了zhaoce073大水忍不住说2句
dependency version collision problemHelp!: tomcat classloading problem
Java的method不都是virtual的么?private就不同了? Re: Help!: tomcat classloading problem
请教一个动态cast的问题菜鸟问题
Classpath questionsSpring Library Bug?
设计模式的问题[合集] 谁能解释一下这里的protected specifier
Generics应该怎么得到它的class?abstract class 的简单例子
请教一个Queue实现的问题关于Protected变量
相关话题的讨论汇总
话题: protected话题: method话题: public话题: class话题: subclass
进入Java版参与讨论
1 (共1页)
p***p
发帖数: 559
1
定义我大概清楚,就是本包和继承它的可以使用。请问在OOP里面代表了一种什么思想呢
?我的理解是,比如现在我编写服务器程序,就是所有内部操纵的Method和变量都应该是
protected的,这样用户即使undercast也无法使用他们,只有API的是public的。另外就
是凡是用户能得到的全部用wrapper包起来。
不过我看看商业程序的源代码,发现里面大把的public,只有和启动、设置classloader
这些有关的才是protected,不会有安全问题么?
感觉设置成private和public都比较好把握,就是protected比较困难。我现在的办法是全
设置成protected和private,使用过程中如果需要,就改成public。
g*****g
发帖数: 34805
2
protected, as well as public, is a commitment for later code
if you are writing an api. Once released, it's part of legacy
and you can't change the interface without concern.
Use private and default as much as possible, those methods
that may be extended later on by others, can be claimed protected




classloader


【在 p***p 的大作中提到】
: 定义我大概清楚,就是本包和继承它的可以使用。请问在OOP里面代表了一种什么思想呢
: ?我的理解是,比如现在我编写服务器程序,就是所有内部操纵的Method和变量都应该是
: protected的,这样用户即使undercast也无法使用他们,只有API的是public的。另外就
: 是凡是用户能得到的全部用wrapper包起来。
: 不过我看看商业程序的源代码,发现里面大把的public,只有和启动、设置classloader
: 这些有关的才是protected,不会有安全问题么?
: 感觉设置成private和public都比较好把握,就是protected比较困难。我现在的办法是全
: 设置成protected和private,使用过程中如果需要,就改成public。

g****y
发帖数: 15
3
那个定义实际上就说明了用法。在程序不再考虑修改(或扩展)时,一个method应该是
private还是protected是很清楚的,不会出现难确定。当然,一个class还不知道会不会
有subclass时,有些method用private或protected都可以,原则是可能被subclass用的用
protected修饰。但肯定的一点是,final class是不应该有protected的method或
variable的。
protected variable是有用的,跟protected method一样,用来在subclass里使用这个
variable,因为private的variable不会被继承,所以在有些时候肯定是需要protected
variable的。
对于public method,不是尽量避免expose过多的method,而是一个method该是public就
public,这个public method是给别的class(可能同package,也可能不用package)用的
,给同一个package里用的用default scope,给subclass用的
c*****t
发帖数: 1879
4
你这说的无非是定义。实际上什么是 private 什么是 protected 这之间很多情况
下很难确定。
用 protected variable 本身是个错误,是要尽量避免的。package scope variable
也要避免。
至于 protected function ,我个人认为一开始最好所有不是 public 的 function
都是 private ,然后根据需要才慢慢变成 protected 。特别是在写 API 的时候,
要尽量避免 expose 过多的 function,对今后的改动会有很大的限制。很多情况下,
使用 function object 可以替代 protected ,其实就是手动的 polymorphism。
我对 package scope 的 function 用的不多,一般都是 package scope 的 class。




【在 g****y 的大作中提到】
: 那个定义实际上就说明了用法。在程序不再考虑修改(或扩展)时,一个method应该是
: private还是protected是很清楚的,不会出现难确定。当然,一个class还不知道会不会
: 有subclass时,有些method用private或protected都可以,原则是可能被subclass用的用
: protected修饰。但肯定的一点是,final class是不应该有protected的method或
: variable的。
: protected variable是有用的,跟protected method一样,用来在subclass里使用这个
: variable,因为private的variable不会被继承,所以在有些时候肯定是需要protected
: variable的。
: 对于public method,不是尽量避免expose过多的method,而是一个method该是public就
: public,这个public method是给别的class(可能同package,也可能不用package)用的

g****y
发帖数: 15
5
public method是一个class给其它class调用的interface,当且仅当一个method需要这样
的access属性时,才用public。
private method时一个class内部自己用的,不能subclass被override,对subclass也不
可见。
protected method对subclass是可见的,并且在subclass里可以override。一个base
class里的protected method可以看作是这个class给subclass用的interface。
一个method不是使用过程中有需要才改public,而是要设计时就想好这个class需要提供
什么用的功能,别的class如何使用它,有可能会怎样扩展它的功能。




classloader
Family M.1136428243.j0 yokel uuuu 大家发现没有?
Joke M.1136428270.Z0 redpearl redpearl Re: 全國各地“石頭剪子佈”叫法徴集zt
Family M.1136428251.o0 dude lost R

【在 p***p 的大作中提到】
: 定义我大概清楚,就是本包和继承它的可以使用。请问在OOP里面代表了一种什么思想呢
: ?我的理解是,比如现在我编写服务器程序,就是所有内部操纵的Method和变量都应该是
: protected的,这样用户即使undercast也无法使用他们,只有API的是public的。另外就
: 是凡是用户能得到的全部用wrapper包起来。
: 不过我看看商业程序的源代码,发现里面大把的public,只有和启动、设置classloader
: 这些有关的才是protected,不会有安全问题么?
: 感觉设置成private和public都比较好把握,就是protected比较困难。我现在的办法是全
: 设置成protected和private,使用过程中如果需要,就改成public。

c*****t
发帖数: 1879
6
你这说的无非是定义。实际上什么是 private 什么是 protected 这之间很多情况
下很难确定。
用 protected variable 本身是个错误,是要尽量避免的。package scope variable
也要避免。
至于 protected function ,我个人认为一开始最好所有不是 public 的 function
都是 private ,然后根据需要才慢慢变成 protected 。特别是在写 API 的时候,
要尽量避免 expose 过多的 function,对今后的改动会有很大的限制。很多情况下,
使用 function object 可以替代 protected ,其实就是手动的 polymorphism。
我对 package scope 的 function 用的不多,一般都是 package scope 的 class。




【在 g****y 的大作中提到】
: public method是一个class给其它class调用的interface,当且仅当一个method需要这样
: 的access属性时,才用public。
: private method时一个class内部自己用的,不能subclass被override,对subclass也不
: 可见。
: protected method对subclass是可见的,并且在subclass里可以override。一个base
: class里的protected method可以看作是这个class给subclass用的interface。
: 一个method不是使用过程中有需要才改public,而是要设计时就想好这个class需要提供
: 什么用的功能,别的class如何使用它,有可能会怎样扩展它的功能。
:
: 呢

g****y
发帖数: 15
7
OOP要求能封装尽量封装,不该给别的class用的method一定不能让别的class access。我
们对于一些公用的interface都要写wrapper,只提供用户他们需要用的的method。如标准
的JMS interface里用户可以用一个public的method create topic,我们不想让用户有这
样的功能,所以wrapper里就没有这个method。在那些要求很高的软件里,让用户用了不
该用的method,后果有时很严重的。
你看tomcat 的每一个public method,确实都是需要public的吗?可以改成protected或
private吗?里面用protected的地方,可以改成private嘛?

methods

【在 p***p 的大作中提到】
: 定义我大概清楚,就是本包和继承它的可以使用。请问在OOP里面代表了一种什么思想呢
: ?我的理解是,比如现在我编写服务器程序,就是所有内部操纵的Method和变量都应该是
: protected的,这样用户即使undercast也无法使用他们,只有API的是public的。另外就
: 是凡是用户能得到的全部用wrapper包起来。
: 不过我看看商业程序的源代码,发现里面大把的public,只有和启动、设置classloader
: 这些有关的才是protected,不会有安全问题么?
: 感觉设置成private和public都比较好把握,就是protected比较困难。我现在的办法是全
: 设置成protected和private,使用过程中如果需要,就改成public。

p***p
发帖数: 559
8
Thanx all. the problem is that, I checked Tomcat and Jetty source, 90% methods
are public.....

【在 g****y 的大作中提到】
: OOP要求能封装尽量封装,不该给别的class用的method一定不能让别的class access。我
: 们对于一些公用的interface都要写wrapper,只提供用户他们需要用的的method。如标准
: 的JMS interface里用户可以用一个public的method create topic,我们不想让用户有这
: 样的功能,所以wrapper里就没有这个method。在那些要求很高的软件里,让用户用了不
: 该用的method,后果有时很严重的。
: 你看tomcat 的每一个public method,确实都是需要public的吗?可以改成protected或
: private吗?里面用protected的地方,可以改成private嘛?
:
: methods

g****y
发帖数: 15
9
举一个实际的例子,你要写一个Queue class,这个class需要有queue的功能:pop(), 弹
出queue最前面的一个object;put(obj),将一个object放入queue尾。java.util.
ArrayList()有queue的这些功能,现在你想用ArrayList实现这个queue class,你怎样实
现呢?class Queue extends ArrayList? or use object adapter?
g****y
发帖数: 15
10
那个定义实际上就说明了用法。在程序不再考虑修改(或扩展)时,一个method应该是
private还是protected是很清楚的,不会出现难确定。当然,一个class还不知道会不会
有subclass时,有些method用private或protected都可以,原则是可能被subclass用的用
protected修饰。但肯定的一点是,final class是不应该有protected的method或
variable的。
protected variable是有用的,跟protected method一样,用来在subclass里使用这个
variable,因为private的variable不会被继承,所以在有些时候肯定是需要protected
variable的。
对于public method,不是尽量避免expose过多的method,而是一个method该是public就
public,这个public method是给别的class(可能同package,也可能不用package)用的
,给同一个package里用的用default scope,给subclass用的

【在 c*****t 的大作中提到】
: 你这说的无非是定义。实际上什么是 private 什么是 protected 这之间很多情况
: 下很难确定。
: 用 protected variable 本身是个错误,是要尽量避免的。package scope variable
: 也要避免。
: 至于 protected function ,我个人认为一开始最好所有不是 public 的 function
: 都是 private ,然后根据需要才慢慢变成 protected 。特别是在写 API 的时候,
: 要尽量避免 expose 过多的 function,对今后的改动会有很大的限制。很多情况下,
: 使用 function object 可以替代 protected ,其实就是手动的 polymorphism。
: 我对 package scope 的 function 用的不多,一般都是 package scope 的 class。
:

1 (共1页)
进入Java版参与讨论
相关主题
关于Protected变量Classpath questions
Java中如何动态生成对象设计模式的问题
get full class nameGenerics应该怎么得到它的class?
com.sun.tools.javac.Main 问题请教一个Queue实现的问题
如何获得类定义的public methods?看了zhaoce073大水忍不住说2句
dependency version collision problemHelp!: tomcat classloading problem
Java的method不都是virtual的么?private就不同了? Re: Help!: tomcat classloading problem
请教一个动态cast的问题菜鸟问题
相关话题的讨论汇总
话题: protected话题: method话题: public话题: class话题: subclass