|
|
1
17
开发人员不会抱怨保护措施,直到他们阻止开发人员获得他们想要使用的东西。对于正在创建子类的开发人员来说,protected没有什么大不了的,因为他们可以从子类中访问商品。 对于那些 使用 一个给定的类(不是扩展它),受保护的块访问潜在的丰富的内部实现细节。这就是他们会抱怨的。
我曾在(不,是书面的)框架中工作过,在这些框架中,使用该框架的开发人员抱怨它对内部细节不够宽容。这些人抱怨说,即使修复了bug,添加了特性,并在各种平台迁移中重写了实现,但公共的、受支持的接口、代码契约仍然保持稳定,他们的代码基本上没有受到影响。 因此,简而言之,开发人员会抱怨受保护(和私有)的访问修饰符,因为它妨碍了开发人员认为最简单、最快的解决方案实现方式,而忽略了依赖这些实现细节的未来成本。
|
|
|
2
6
因为对象交互优于继承。
据报道,jamesgosling说,如果他再做一次Java,他就不用类了,并澄清了他所说的“类”的意思
继承
.
图案上的Holub
这是一本Java的书,但是从面向对象的角度来看非常棒)
受保护的 公众的 -只是。 |
|
|
3
4
没有广泛的轮询,我只是猜测一下,这里主要讨论应用于成员函数的受保护修饰符。
我怀疑是因为
如果您的库允许子类重写受保护的方法,那么您必须注意,受保护方法的每个调用对于不熟悉库的特定要求的程序员来说都是安全的。这需要仔细的文档,而且目前还没有一个好的方法来限制流行语言的使用。
|
|
|
4
4
第一,
使用
其次,
使用
一种常见的、被广泛接受的用法
在这种情况下,您通常不关心子实现,也不想限制可能的解决方案;子方法可能需要helper方法的公共包装器,以便与其依赖项通信。
|
|
|
5
3
过度使用
因此,通过受保护的方法公开过多的功能,您可能会允许子类过多地放松不变量,从而使子类不是真正的子类型。
|
|
|
6
3
封装被认为是一种很好的实践,通过使成员受到保护,可以打破封装,因为子类可以直接修改变量。 |
|
|
7
1
对于受保护的字段/方法,子类依赖于父类的内部结构,这对耦合非常不利。这是一种说“我有一个‘私有’方法/字段,但是我的子类可以使用它”,更糟糕的是“可以重写/修改它”。
这并不是我的观点,但我可以理解有些开发人员发现
资源: |
|
|
8
1
有时候这才是您真正想要做的:您已经为两个不同的用例仔细地设计了两个接口。抽象类可能属于这一类:您有使用
不过,当你使用
这还不够吗?把事情做得更好是。。。更好;-) |
|
|
9
1
“Protected”的一个原因是类在它的契约中包含对类来说是真实的,但对派生类来说不一定是真实的东西可能是有用的。在Liskov替换原则下,任何可以通过公共接口与Q类型的对象进行的操作,对于任何类型继承Q的对象都应该是可行的。因此,Q不应该公布任何在Q的某些派生下可能不存在的能力。
从基类型派生的密封类(仅支持使用受保护的方法进行克隆)可以确定其类型的任何对象都支持克隆。即使班级没有封号,除非有人 不当 从它派生一个不支持克隆的类,派生类中的代码可以确定它将只用于可以克隆的对象。 相比之下,使用传入的基类型对象执行操作的类在编译时无法知道它所提供的对象是否支持克隆。公开较低级别的克隆方法会导致在不支持它们的情况下调用它们。 |
|
|
10
1
因为受保护的是 它的子类是公共的 ,它是子类的API。对于客户端来说,它看起来像许多公共方法。 |
|
|
11
0
如果您正在开发单个包应用程序,并且您不希望它被扩展(它不是库),那么最好使用默认的修饰符-package private。 如果您正在开发一个多包应用程序,那么您可能需要protected修饰符来允许贝塔。儿子调用阿尔法。父亲超类构造函数(但是阿尔法。父亲构造函数不可用)。 我将在没有证据的情况下推测开发人员更喜欢单包应用程序。
|
|
|
12
0
有一条规则……“除非你有充分的理由不这样做,否则就用私人的” 你必须考虑是否有人会使用你的包/类并决定真正需要什么。 我从不使用protected,除非我要将lib发布给其他人,而且只有在需要时才使用。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |