Java 将接口(interface)转换为类

标签 java class interface casting

我有一个关于接口(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 大小写的 - 所以放弃 ci前缀。)

关于Java 将接口(interface)转换为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7875513/

相关文章:

Java 解析日期 w/SimpleDateFormat

java - Maven有Java持续测试插件吗?

ruby-on-rails - 如何在 Ruby on Rails 中将类添加到 datetime_select

java - 调用/分配实现接口(interface)的类的变量

java - 递归参数如何工作?

c# - 寻找一种在运行时操作 .Net CIL 的方法

Java 嵌套 ArrayList 返回对象

javascript - 向一些 javascript 按钮添加一个类

c# - 内部接口(interface)和类

java - 方法调用者和被调用者,循环类级别方法调用