问题标签 [access-modifiers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
18841 浏览

java - java.lang.Object 的受保护方法如何免受子类的影响?

关键字protected授予对同一包和子类 ( http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html ) 中的类的访问权限。

现在,每个类都有java.lang.Object超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。

因此我得出结论,每个类都可以访问java.lang.Object的方法,即使它们是protected

看看下面的例子:

虽然getOne()编译得很好,但getTwo()给出

我既不明白为什么getTwo()不编译也不明白java.lang.ObjectgetOne().

0 投票
15 回答
61166 浏览

c# - 为什么我不能拥有受保护的接口成员?

反对在接口上声明受保护的访问成员的论点是什么?例如,这是无效的:

在这个例子中,接口IOrange将保证实现者至少OrangePips向他们的继承者提供一个实例。如果实施者愿意,他们可以将范围扩大到 full public

接口成员的目的protected是为继承者(子类)提供支持契约,例如:

(诚​​然,这对 s 不起作用struct

我在接口中看不到privateorinternal修饰符的太多情况,但同时支持publicandprotected修饰符似乎是完全合理的。


我将尝试通过将成员与s 完全分开来解释protected成员在s 上的效用:interfaceinterface

让我们想象一个新的 C# 关键字 ,support来强制继承合同,因此我们声明如下:

这将允许我们通过契约类为它们的继承者提供受保护的成员:

这并不是特别有用,因为类已经通过protected首先提供成员来暗示这种契约。

但是我们也可以这样做:

从而适用IOrangeSupport于所有实现IOrange并要求它们提供特定protected成员的类——这不是我们目前可以做的事情。

0 投票
7 回答
113534 浏览

python - Python中的“私有”(实现)类

我正在编写一个由两部分组成的小型 Python 模块:

  • 一些定义公共接口的函数,
  • 上述函数使用的实现类,但在模块外没有意义。

起初,我决定通过在使用它的函数中定义它来“隐藏”这个实现类,但这会妨碍可读性,并且如果多个函数重用同一个类,则无法使用。

那么,除了注释和文档字符串之外,是否还有一种机制可以将类标记为“私有”或“内部”?我知道下划线机制,但据我了解,它仅适用于变量、函数和方法名称。

0 投票
7 回答
31604 浏览

c# - 除了这样,为什么我不能访问受 C# 保护的成员?

这段代码:

生成此错误:

无法通过“C”类型的限定符访问受保护的成员“CF(D)”;限定符必须是“D”类型(或派生自它)

他们到底在想什么?(更改该规则会破坏某些东西吗?)除了公开 F 之外,还有其他方法吗?


编辑:我现在明白了为什么会这样(谢谢Greg)但我仍然对理性感到有些困惑;给定:

为什么D不能调用 EF?


错误消息已编辑,因此我可能在其中输入了错字。

0 投票
11 回答
162003 浏览

c# - “受保护”和“受保护内部”有什么区别?

protected有人可以解释一下 C# 中的和protected internal修饰符之间的区别吗?看起来他们的行为是相同的。

0 投票
3 回答
24333 浏览

java - 受保护/公共内部类

protected有人可以向我解释/public 内部课程有什么区别吗?

我知道public内部类是要尽可能避免的(就像在这篇文章中解释的那样)。

但据我所知,使用protectedpublic修饰符之间没有区别。

看看这个例子:

...

...

所有这些都编译并且无论我声明InnerFoo protected还是public.

我错过了什么?请指出一个使用protectedor有区别的情况public

谢谢。

0 投票
4 回答
1398 浏览

interface - 面向对象的分析与设计

为什么我不能在接口中指定静态类型的方法。

有没有其他方法可以做到这一点?

但我应该只使用抽象类的接口。

/

在接口中指定访问说明符有什么问题吗?

我想在接口中指定事件,并且只能由实现的类访问,所以我想要该事件的受保护访问说明符。

我有某些功能可以在另一个类中使用接口,在这种情况下我可以使用公共访问说明符。

0 投票
17 回答
733617 浏览

c# - 在 C# 中,public、private、protected 和没有访问修饰符有什么区别?

我一直在使用的所有大学时期public,并且想知道 , 和 之间publicprivate区别protected

还有什么static做而不是一无所有?

0 投票
3 回答
313 浏览

c# - 内部接口——暴露我的无知

我知道 两个问题解释了为什么我不能在接口中使用受保护/私有方法,我想要解决的是如何控制从哪里调用我的方法,简单地说:

消费者可以使用默认的 IStateMachine,或者自己滚动。

我想知道是否有任何方法可以确保仅从 IStateMachine 中调用 Action_ 方法,这样消费者就不会开始弄乱状态的东西。我怀疑没有办法做到这一点,但想知道我是否遗漏了什么。我不是设计模式大师。

0 投票
1 回答
1045 浏览

java - 扩展 jog4j RollingFileAppender rollOver() 访问级别的问题

我正在尝试扩展 RollingFileAppender,以便即使没有消息进入日志系统,它也会旋转。通常,当消息到达并进行时间检查以触发旋转时,会调用 rollOver 方法。

我的 RollingFileAppender 版本将每 x 秒调用一次 rollOver,这样即使没有消息到达,我也可以保证轮换。

现在我的问题是 RollingFileAppender rollOver 的访问级别修饰符没有修饰符。因此,我不能像我希望的那样每隔 x 秒调用一次。

现在查看代码,我不明白为什么它不需要修改器,我决定将该类放入我的包中并调用 rollOver。

现在这感觉很脏,如果我想调用翻转,我还有其他选择吗?