面向对象的分析与设计

时间:2009-03-04 07:54:45

标签: interface access-modifiers ooad

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

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

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

/

在接口中指定访问说明符是否有任何问题?

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

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

4 个答案:

答案 0 :(得分:2)

我不知道你正在采用什么语言,但我会像在C#中一样回答。

为什么我无法在接口中指定静态类型的方法。 有没有替代方法呢?

这是因为你无法覆盖静态方法。 你想要实现什么目标?

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

答案 1 :(得分:1)

接口仅向公众描述您的实现者。接口的唯一访问修饰符是接口本身的“内部”,这使得它只对同一个程序集的所有成员或“InternalsVisibleTo”属性所知的那些成员可见。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我对OOP的体验与Actionscript 3有关,但我确信它是相对的。

当类扩展祖先类时,不能覆盖静态方法,也不会使用静态方法。

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

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

重要的是要注意,getter / setter方法签名也可以在接口中使用。这些非常有用,如果您只使用setter,则您创建了对私有封装变量的只读公共访问权。

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