如何一步获取Child Class对象?

时间:2013-12-06 05:23:54

标签: java

我想创建一个子类对象

超过100个类扩展MasterClass

MasterClass是

 public class MasterClass{
  private int key;
  private String value;
  private String description;

  public String getKey()
  {
    return key;
  }

  public void setKey(String key)
  {
    this.key= key;
  }


  public String getDescription()
  {
    return description;
  }

  public void setDescription(String description)
  {
    this.description = description;
  }

  public String getValue()
  {
    return value;
  }

  public void setValue(String value)
  {
    this.value= value;
  }

 }

其他类的例子

public class Product extends MasterClass{
  public Product(){ }
 }
public class Customer extends MasterClass{
  private int productKey;
  public Customer (){ }
 public String getProductKey()
  {
    return productKey;
  }

  public void setProductKey(String productKey)
  {
    this.productKey= productKey;
  }

}

等...

我将从客户端获取一个MasterClass对象,我想将该对象类型转换为相应的

if(masterClass instanceof User) {  
  User a_user = (User) a_ masterClass;

} else if(masterClass instanceof Customer) {
  Customer a_customer = (Customer) a_ masterClass;

}
  .
  .//96 else if
  .
  .
  .
  .
  else
  {
   //Create an object
  }

如果我这样做,我最终会得到100个其他的。

请告诉我如何在没有其他情况下实现这一目标?

提前致谢。

2 个答案:

答案 0 :(得分:1)

你需要多态性。

例如:

  public void func(MasterClass m){

     //your if else block;

}

代替此。您可以将func函数添加到MasterClass并在每个子项上覆盖它。然后只需调用YourInstance.func();

 public class MasterClass{
         public void func(){};
    }
    public class Customer extends MasterClass{
     @Override
     //implement such on each child
     public void func(){//spesific overrided function for Customer child }
    }

  //then


     public void func(MasterClass m){

             m.func();
        }

答案 1 :(得分:0)

100个儿童班?疯。 我建议你检查所有这些子类是否与Master类强烈“IS-A”逻辑关系。

通常,为了避免if-else,使用多态,java将根据参数的类型进行运行时检查以决定调用哪个函数。

例如

class Application{

   public static void main(String[] args){
      Application app = new Application();
      ChildClass1 child1 = new ChildClass1();
      ChildClass2 child2 = new ChildClass2();

      app.method(child1); //"ChildClass1's behaviour"
      app.method(child2); //"ChildClass2's behaviour"
   }

  public method(ChildClass1 arg) {
    System.out.println("ChildClass1's behaviour");
  }

   public method(ChildClass2 arg) {
   System.out.println("ChildClass2's behaviour");
  }

   // 98 more...
}