创建接口类java的实例

时间:2015-08-21 14:43:07

标签: java interface instance conceptual

有人可以向我解释创建Interface类变量的含义是什么?

具体来说,以下代码的含义是什么:

InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);

我一直认为接口(在Java中)只是方法声明的集合,其功能由实现接口的类定义。例如,如果我有一个界面:

public interface IMoveBehavior(){
    public void move_Along_X();
    public void move_Along_Y();
    public void move_Along_Z();
}

然后该类将使用此接口:

public class ABC() implements IMoveBehavior{
    public void move_Along_X(){
        //do whatever
    }
    public void move_Along_Y(){
        //do whatever
    }
    public void move_Along_Z(){
        //do whatever
    }   
}

所以,回到

InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);

我真的不明白这在概念上究竟是什么意思。有人可以解释或指出我可以自学的资源吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

您正在看一个多态性案例,这是使接口变得有用的核心概念之一。

InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);

这里发生的是factory.createFactorObject(zz.CONST);正在返回一个Object。我不确切地知道它是什么类型的对象,但是如果这个代码编译并成功运行,那么该对象必须至少是一个实现InterfaceA的类。因此,它具有InterfaceA中定义的所有方法的实现。

因此,您可以转换为InterfaceA,并将其视为可以使用InterfaceA中定义的方法的给定。底层JVM负责确切知道这些方法是如何实现的(通过Object实例化的类)以及调用这些方法时该怎么做。

答案 1 :(得分:1)

java中不允许Interfaces的实例。因此可以使用factorypattern来生成实现Interface的类的实例。例如,createFactoryObject可能在内部看起来像这样:

...
class toCreate implements InterfaceA{
    ...//all methods implemented
}

return new toCreate();

,或者只是使用提供的原型来生成新实例。 命名的嵌套类只是为了使事情更清晰,可能是一个匿名类,或任何其他类。基本上,这只是一种完全封装类成员的方法,除了接口指定的成员。

答案 2 :(得分:0)

兴趣在于你可以很多实现相同的接口,这意味着同一个接口的许多行为,一个很好的例子是数据访问对象

我的界面

Interface Dao {
    Entity create(Entity e);

    Entity find(long id);

    Entity merge(Entity e);

    void delete(Entity e);
}

和2个不同的实现

Class JpaDao implements Dao {
    Entity create(Entity e) {
        //use EntityManager
    }

    Entity find(long id) {
        //use EntityManager
    }

    Entity merge(Entity e) {
        //use EntityManager
    }

    void delete(Entity e) {
        //use EntityManager
    }
}

Class JdbcDao implements Dao {
    Entity create(Entity e) {
        //use preparedStatement
    }

    Entity find(long id) {
        //use preparedStatement
    }

    Entity merge(Entity e) {
        //use preparedStatement
    }

    void delete(Entity e) {
        //use preparedStatement
    }
}

这称为polymorphism