如何获得Child class?

时间:2013-12-02 08:04:53

标签: java

我想创建一个子类的对象

超过100个类扩展MasterClass

MasterClass是

 public class MasterClass{
  int key;
  String value;
  String displayValue;
  boolean status;
 } 
 public class User extends MasterClass{
 public User(){ }
 }
 public class Customer extends MasterClass{
 String productName;
 public Customer (){ }
 }

等...

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

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

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

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

像Java一样使用多态和泛型。

Polymorphism允许您在对象上调用对每种类型都有不同行为的方法。实现此目的的最简单方法是在基类MasterClass中提供抽象方法,然后在每个扩展类中使用不同的功能覆盖它。你可能正在寻找这样的东西:

class MasterClass {
    int age;
    // ...
    public abstract void doWork();
    public int getAge() { return age; }
    // .. more methods
}

class User extends MasterClass {
    // customize User here
    @Override
    public void doWork() {  /* User does work in some way */ }
}

class Customer extends MasterClass {
    // customize Customer here
    @Override
    public void doWork() {  /* Customer does work in some other way */ }
}

// ...

如果您对OOP不太熟悉,here是一本很好的入门教程。

如果您不允许更改课程,则可以填写HashMap<Class, MyFunctor>这样的查找表,您可以为每种类型的人分配不同的functor

此外,您可能希望使用generics。泛型允许您捕获和限制传递给方法的对象类型。

答案 1 :(得分:1)

也许你可以使用约束T扩展MasterClass的泛型?

答案 2 :(得分:0)

使用Design Pattern的基本概念,您可以在尝试初始化的对象中创建这样的构造函数

MasterClass masterClass;

public MyCreatorOject(MasterClass masterClass)
{
    this.masterClass = masterClass;
}
稍后当你创建对象时,它可以是

new MyCreatorObject(new User());

new MyCreatorObject(new Customer());