有人可以向我解释创建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);
我真的不明白这在概念上究竟是什么意思。有人可以解释或指出我可以自学的资源吗?
谢谢!
答案 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