我有一个关于接口(interface)和类实现接口(interface)的问题。
这是我的代码:
interface iMyInterface {
public iMethod1();
}
public class cMyClass implements iMyInterface {
public iMethod1() {
// some code
}
protected iMethod2() {
// some code
}
}
我想创建一个 iMyInterface
实例:
iMyInterface i = new cMyClass();
i.iMethod1();
没关系,但是如何从我的接口(interface)实例中调用 iMethod2()
?这是否有效且安全:
((cMyClass)i).iMethod2();
感谢您的帮助。
最佳答案
是的,这会起作用(如果您更改 cMyClass
的声明以实现 iMyInterface
)并且只要引用确实确实 引用 cMyClass
的实例。
但是,这通常是个坏主意。使用接口(interface)的全部意义在于能够与任何 实现一起工作——它将抽象与实现分开。如果您随后需要一个特定的实现,您不妨将 i
的类型设置为 cMyClass
作为开始。
因此,假设您没有自己调用 cMyClass
构造函数,而是收到一个类型为 iMyInterface
的方法参数 - 转换为 cMyClass
是个坏主意> 在这一点上,因为它可能是接口(interface)的不同实现。
(另外,开始遵循 Java 命名约定是个好主意,它声明类和接口(interface)应该是 Pascal 大小写的 - 所以放弃 c
和 i
前缀。)
关于Java 将接口(interface)转换为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7875513/