【问题标题】:Object Oriented Analysis and Design面向对象的分析与设计
【发布时间】:2010-10-11 05:05:21
【问题描述】:

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

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

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

/

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

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

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

【问题讨论】:

标签: interface access-modifiers ooad


【解决方案1】:

我在 OOP 方面的经验与 Actionscript 3 相关,但我确信它是相对的。

静态方法不能被覆盖,并且在类扩展祖先类时不会使用它们。

接口中未使用访问修饰符,因为该接口用于设置 PUBLIC 方法。

在 AS3 中,接口只是一个没有块的方法签名,但包括数据类型。

请务必注意,getter/setter 方法签名也可以在接口中使用。这些很有用,如果您只使用 setter,则您已经创建了对私有封装变量的只读公共访问。

就接口而不是抽象类而言,这完全取决于您希望如何实现代码。通常,接口和抽象类一起使用,以利用继承和多态(扩展/实现)实现不同的结果。

【讨论】:

    【解决方案2】:

    我不知道你用的是什么语言,但我会像用 C# 一样回答。

    为什么我不能在接口中指定静态类型的方法。 有没有其他方法可以做到这一点??

    这是因为你不能覆盖静态方法。 你想达到什么目的?

    接口中的成员在 C# 中始终是公共的。如果您需要其他保护级别,请使用抽象类。如果您无法从界面访问受保护事件,它们的目的是什么?那么它与接口无关(记住,接口不能有任何代码)。如果您指的是只有实现类可以引发事件,请放心,它们是唯一可以引发事件的类。事件就是这样构建的——只有类本身可以引发事件。你不能在类外部引发事件(除非你在类上有一个方法,引发事件)。

    【讨论】:

      【解决方案3】:

      我不明白你对第一个问题的意思,但你关于在接口中使用 protected 的第二个问题是直接“不”。接口被称为“接口”,因为它们指定了您可以与该对象进行通信的“接口”(即公共方法)。

      【讨论】:

        【解决方案4】:

        接口仅向公众描述您的实现者。接口的唯一访问修饰符是接口本身的“internal”,这使其成为仅对同一程序集的所有成员或通过“InternalsVisibleTo”属性已知的成员可见的接口。

        如果只有实现者应该看到某个事件,那么该事件必须在某种基类中。

        静态方法几乎是过程式编程的残余。它们确实有它们的用途(参见例如扩展方法),但实际上与 OOP 并没有太大关系。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-19
          • 1970-01-01
          相关资源
          最近更新 更多