从未确定的子类转换为超类

时间:2013-11-17 22:06:46

标签: java inheritance

所以在下面的例子中,我有一个带有两个子类的抽象超类。我希望方法 someMethod 返回 otherclass 类型的对象,然后我将其转换为 someSuperClass 。如何创建与 otherclass 相同类型的对象的新实例?我想避免让它成为一个抽象方法,然后在每个子类中定义它。

public abstract class SomeSuperClass {
    public SomeSuperClass() {
    }

    public SomeSuperClass someMethod(SomeSuperClass otherClass) {
        return (SomeSuperClass) ????
    }
}

public class SomeSubClass extends SomeSuperClass {
    public SomeSubClass() {
        super();
    }
}

public class SomeOtherSubClass extends SomeSuperClass {
    public SomeOtherSubClass() {
        super();
    }
}

编辑:

otherClass 是一个参数/对象,类型为 SomeSubClass SomeOtherSubClass

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您可以使用对象的Class使用newInstance()方法创建新的实例。

public SomeSuperClass someMethod(SomeSuperClass otherClass) 
        throws InstantiationException, IllegalAccessException {
    return otherClass.getClass().newInstance();
}

以下是我工作的完整示例:

public abstract class SomeSuperClass {

    public SomeSuperClass someMethod(SomeSuperClass otherClass) throws InstantiationException, IllegalAccessException {
        return otherClass.getClass().newInstance();
    }

    public static void main(String[] args) {
        SomeSubClass subClass = new SomeSubClass();
        try {
            SomeSuperClass newClass = subClass.someMethod(subClass);
            System.out.println(newClass.getClass().getName());
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

public SomeSuperClass someMethod(SomeSuperClass otherClass) {
    try {
        return (SomeSuperClass)otherClass.getClass().getConstructor().newInstance();
    }
    catch (Exception e) {

    }
    return null;
}

这样的事情对你有用。