我对接口和类实现接口有疑问。

这是我的代码:

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大小写-因此,请放弃ci前缀。)

09-11 18:50