创建接口实例 class java
Creating instances of interface class java
谁能给我解释一下创建接口 class 变量的含义是什么?
具体来说,以下代码是什么意思:
InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);
我一直认为接口(在Java中)只是方法声明的集合,其功能由实现接口的classes定义。例如,如果我有一个接口:
public interface IMoveBehavior(){
public void move_Along_X();
public void move_Along_Y();
public void move_Along_Z();
}
那么 class 将使用此接口作为:
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);
我真的不明白这在概念上到底是什么意思。有人可以解释或指出我可以自学的资源吗?
谢谢!!
您看到的是多态性,它是使接口有用的核心概念之一。
InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);
这里发生的是 factory.createFactorObject(zz.CONST);正在返回一个对象。我不知道它到底是什么类型的对象,但如果这段代码编译并运行成功,那么该对象至少必须是实现了 InterfaceA 的 class。因此,它具有 InterfaceA 中定义的所有方法的实现。
所以你可以强制转换为InterfaceA,并假定你可以使用InterfaceA中定义的方法。底层 JVM 负责准确了解这些方法是如何实现的(通过 class 实例化对象)以及调用这些方法时要执行的操作。
Interfaces
的实例在 java 中是不允许的。因此可以使用工厂模式来生成实现 Interface
的 class 实例。例如,createFactoryObject
内部可能看起来像这样:
...
class toCreate implements InterfaceA{
...//all methods implemented
}
return new toCreate();
,或者简单地使用提供的原型来生成新的实例。
命名嵌套 class 只是为了让事情更清楚,也可以是匿名 class,或任何其他 class。基本上这只是一种完全封装class成员的方法,除了接口指定的成员。
有趣的是,您可以多次实现同一接口,这意味着同一接口有许多行为,数据访问对象就是一个很好的例子
我的界面
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
}
}
谁能给我解释一下创建接口 class 变量的含义是什么?
具体来说,以下代码是什么意思:
InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);
我一直认为接口(在Java中)只是方法声明的集合,其功能由实现接口的classes定义。例如,如果我有一个接口:
public interface IMoveBehavior(){
public void move_Along_X();
public void move_Along_Y();
public void move_Along_Z();
}
那么 class 将使用此接口作为:
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);
我真的不明白这在概念上到底是什么意思。有人可以解释或指出我可以自学的资源吗?
谢谢!!
您看到的是多态性,它是使接口有用的核心概念之一。
InterfaceA x = (InterfaceA) factory.createFactoryObject(zz.CONST);
这里发生的是 factory.createFactorObject(zz.CONST);正在返回一个对象。我不知道它到底是什么类型的对象,但如果这段代码编译并运行成功,那么该对象至少必须是实现了 InterfaceA 的 class。因此,它具有 InterfaceA 中定义的所有方法的实现。
所以你可以强制转换为InterfaceA,并假定你可以使用InterfaceA中定义的方法。底层 JVM 负责准确了解这些方法是如何实现的(通过 class 实例化对象)以及调用这些方法时要执行的操作。
Interfaces
的实例在 java 中是不允许的。因此可以使用工厂模式来生成实现 Interface
的 class 实例。例如,createFactoryObject
内部可能看起来像这样:
...
class toCreate implements InterfaceA{
...//all methods implemented
}
return new toCreate();
,或者简单地使用提供的原型来生成新的实例。 命名嵌套 class 只是为了让事情更清楚,也可以是匿名 class,或任何其他 class。基本上这只是一种完全封装class成员的方法,除了接口指定的成员。
有趣的是,您可以多次实现同一接口,这意味着同一接口有许多行为,数据访问对象就是一个很好的例子
我的界面
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
}
}