【问题标题】:Method in parent class that returns child class in java在java中返回子类的父类中的方法
【发布时间】:2014-03-06 11:52:34
【问题描述】:

我有一个父类Product 和一些子类,如CameraTV 等... 现在我想在Product 中创建一个方法,它根据从数据库中获取的对象(我有很多子类)从数据库中获取所有子类的公共属性并返回一个子类的实例。 是否有可能做到这一点?如果是的话,你能给我举个小例子吗?

我的想法是从子类中的类似方法中调用此方法,然后从 db 中获取所有那些不常见的属性。

【问题讨论】:

  • 不能Facade 设计模式缓解您的问题?

标签: java inheritance


【解决方案1】:

首先,您似乎想将数据库访问代码放入您的类中,我不建议这样做。

至于您真正的问题:尝试使用 ORM 框架,例如 EclipseLink 或 Hibernate。那些使用鉴别器列来确定实体的实际类并为您创建和填充实例。作为替代方案(如果您可以决定数据库),您也可以查看ObjectDB

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:
      public class Product{
          int productId;
      
          protected Product(int productId){ //avoid creating pure product objects
              this.productId = productId;
              //load all the common properties            
          }
      
          public Product getProduct(int productId){
              // read the product with productId from the table
              // identify the type of the product
              String type = .... (assume its "camera")
              if("camera".equals(type)){
                  return new Camera(productId);
              } 
          }
      }
      

      在子类中,

      public class Camera extends Product{
          public Camera(int productId){
              super(productId);
          }
      }
      

      用法

      Product p = Product.getProduct(4025);
      

      该方法将从数据库中加载相关字段,识别产品类型,根据产品类型创建子类对象并调用其构造函数。

      子类的构造函数调用超类的构造函数。 超类构造函数加载所有公共属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-13
        • 2011-04-25
        相关资源
        最近更新 更多