如何在继承中使用类对象

时间:2018-10-08 03:47:06

标签: java class object inheritance

我有一个父类Parent和两个子类AB。有一个类Wrapper,它包含一个接口Function,该接口允许程序员为每个包装器指定特定的方法。

Wrapper包含变量Class<Parent> inputClassClass<Parent> outputClass,它们指定输入和输出类型。 Wrapper应该将A映射到A或B,或将B映射到A或B。

当我尝试调用包装构造函数Wrapper(Class<Parent> input, Class<Parent> output, Function func)时出现问题。 Eclipse为尝试将A.classB.class插入inputoutput而给我一个错误。鉴于A和B是Parent的子类,我认为它们将能够传递给构造函数。我该如何实施?

public class Parent {
    protected int value;
    public void setValue(int x){ value = x; }
    public int getValue(){ return value; }
}


public class A extends Parent{
    public A(){ setValue(1); }
    public A(B b){ setValue( b.getValue()); }
}

public class B extends Parent{
    public B(){ setValue(2); }
    public B(A a){ setValue(a.getValue()); }
}


public class Wrapper{
    protected Class<? extends Parent> inputClass;
    protected Class<? extends Parent> outputClass;
    protected interface Function{
        public Parent of(Parent input);
    }
    protected Function function;
    public Wrapper(Class<? extends Parent> in, Class<? extends Parent> out, Function func) {
        inputClass = in;
        outputClass = out;
        function = func;
    }

    public Parent of(Parent input){
        try{
            Parent output = function.of( inputClass.getConstructor( input.getClass() ).newInstance(input) );
            return outputClass.getConstructor( output.getClass() ).newInstance( output );
        } catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

public class Main {
    public static void main(String[] args){
        ///Error occurs here. Can't take A.class in for Parent.class
        Wrapper wrapper = new Wrapper(A.class,B.class, new Function(){
            @Override
            public Parent of(Parent p) {
                return null;
            }
        });     
    }
}

1 个答案:

答案 0 :(得分:0)

问题并非来自A.classB.class,而是来自接口Function嵌套在Wrapper类中。我需要在main的构造函数中编写new Wrapper.Function