Questions tagged «access-modifiers»

17
为什么有私有字段,保护不够?
private类字段/属性/属性的可见性有用吗?在OOP中,迟早要创建一个类的子类,在这种情况下,最好能够理解并能够完全修改实现。 当我对一个类进行子类化时,我要做的第一件事就是将一堆private方法更改为protected。但是,对外部世界隐藏细节很重要-因此我们需要protected而不仅仅是public。 我的问题是:您是否知道一个重要的用例,private而不是protected一个好的工具,或者两个选项“ protected&public”对于OOP语言是否足够?

7
为什么要使用私有静态方法?
我只是想解决一个问题。与具有私有可见性的普通方法相比,拥有私有静态方法有什么意义? 我本来以为拥有静态方法的一个优点是可以在没有类实例的情况下调用它,但是由于它的私有性,甚至有一点是静态的吗? 我能想到的唯一原因是,它有助于从概念上理解类级别(而不是对象级别)上的方法。

3
为什么在Python中没有显式的访问修饰符:
如果“显式优于隐式”,为什么Python中没有显式访问修饰符:Public,Protected,Private等? 我知道想法是程序员应该通过提示知道该怎么做-无需使用“蛮力”。但是,IMO的“封装”或“信息隐藏”不仅是要使人们远离,而且还是组织和结构的问题:您的开发层应该具有自定义的,明确界定的范围和边界,就像物理系统一样。 有人可以在这里为我提供可靠的解释,为什么在Python中这种隐含的访问限制不是隐式的,而是隐式的? 编辑:到目前为止,我已经看到了3个建议的答案,并且我意识到我的问题有两个部分: 例如,为什么没有关键字 private def myFunc(): dostuff.... 而不是国际海事组织的丑陋和难以键入的下划线。但这不是重点。 更重要的是: 为什么这些访问修饰符仅是“建议”或提示而没有执行。以后很难改变吗?将“受保护”更改为“公共”非常简单-如果您的继承链复杂,设计困难,则设计很糟糕-应该完善设计,而不要依赖于易于编写的语言功能结构不良的代码。 强制使用访问修饰符后,您的代码将自动划分开-您知道某些段不在范围内,因此除非有必要,否则不必处理它们。而且,如果您的设计不好,并且发现自己不断将事物移入和移出不同的范围,那么该语言可以帮助您清理行为。 尽管我很喜欢Python,但我发现第二点是一个严重的缺陷。我还没有看到一个很好的答案。

6
Java为什么将软件包访问设置为默认访问?
我之所以问这个问题,是因为我相信他们这样做是有充分的理由的,而且根据我到目前为止的行业经验,大多数人都没有正确使用它。但是,如果我的理论是正确的,那么我不确定为什么它们包含私有访问修饰符...? 我相信,如果正确使用默认访问权限,则可以在保持封装的同时增强可测试性。并且这也使私有访问修饰符变得多余。 通过将唯一的包用于需要隐藏在世界其他地方的方法,可以使用默认访问修饰符来提供相同的效果,并且在不影响可测试性的情况下做到这一点,因为测试文件夹中的包具有相同的功能。能够访问源文件夹中声明的所有默认方法。 我相信这就是Java将包访问权限用作“默认”的原因。但我不确定为什么它们还包括私有访问权,我确定有一个有效的用例...

5
为什么在构造函数中使用setter并没有成为常见的模式?
访问器和修饰符(又名setter和getter)之所以有用,主要有以下三个原因: 它们限制了对变量的访问。 例如,可以访问但不能修改变量。 他们验证参数。 它们可能会引起一些副作用。 大学,在线课程,教程,博客文章和Web上的代码示例都在强调访问器和修饰符的重要性,如今,它们几乎像是代码的“必备”。因此,即使它们不提供任何附加值,也可以找到它们,例如下面的代码。 public class Cat { private int age; public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } 话虽如此,找到更有用的修饰符是很常见的,这些修饰符实际上会验证参数并抛出异常,或者如果提供了无效输入,则返回布尔值,如下所示: /** * Sets the age for the current cat * @param age an integer with the valid values between …

7
在Java中,为什么使受保护成员可以访问同一包的类?
从官方文件 ... 修饰符类包子类世界 公开YYYY 受保护的YYYN 没有修饰符YYNN 私人YNNN 问题是,我不记得有一个用例,在该用例中,我需要从同一包中的类访问受保护的成员。 执行此操作的原因是什么? 编辑:为澄清起见,我正在寻找一个特定的用例,其中同一包中的子类和类都需要访问受保护的字段或方法。 package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); } } package some.package; public class …

6
受保护方法的真实场景
今天,我注意到我基本上从不使用protectedC ++代码中的方法,因为我很少感到需要调用父级的非公共方法。我确实在模板方法模式中使用了Java中的protected,但是由于您可以在C ++中覆盖私有方法,因此我也不需要protected。 那么,在哪些实际场景中我想protected在C ++代码中使用方法? (请注意,我一般不太喜欢实现继承,这可能会解释很多...)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.