我对接口和类实现接口有疑问。
这是我的代码:
interface iMyInterface {
public iMethod1();
}
public class cMyClass implements iMyInterface {
public iMethod1() {
// some code
}
protected iMethod2() {
// some code
}
}
我想这样创建
iMyInterface
的实例:iMyInterface i = new cMyClass();
i.iMethod1();
可以,但是如何从接口实例中调用
iMethod2()
?这是安全的吗?((cMyClass)i).iMethod2();
感谢帮助。
最佳答案
是的,这将起作用(如果您更改cMyClass
的声明以实现iMyInterface
),并且它是安全的,只要引用确实引用了cMyClass
的实例即可。
但是,这通常是个坏主意。使用接口的全部目的是能够与任何实现一起使用-它是将抽象与实现分开。如果您随后需要特定的实现,则最好将i
的类型设置为cMyClass
开头。
因此,假设您不是自己调用cMyClass
构造函数,而是接收到iMyInterface
类型的方法参数-那时将其强制转换为cMyClass
是一个坏主意,因为它可能是接口的另一种实现。
(另外,最好遵循Java命名约定,该约定指出类和接口应使用Pascal大小写-因此,请放弃c
和i
前缀。)