繁体   English   中英

如何更改子类中超类的变量类型?

[英]How to change the type of a variable of a super class in a subclass?

我试图在子类中创建一个构造函数,但我想在不更改超类功能的情况下将其“继承”变量之一更改为更适合该子类的东西(具体来说,我正在尝试更改变量的类型从String到我在另一个类中创建的Object )。 问题是,我不能直接更改或访问该变量,因为它在超类中是私有的,并且该变量没有设置方法。

还有其他有效覆盖超类构造函数的方法,这样我就可以在不编辑超类的情况下修改此“继承”变量? 还是在这种情况下,即使所有其他方法都基本保持不变,我还是不应该从超类继承?

从本质上讲,我想做的事情是这样的

//This should not be changed
public class Super
{
    private SomeArrayObject<String> o;
    private String a;
    private SomeObject b;

    public Super(String a, SomeObject b)
    {
        this.a = a;
        this.b = b;
        o = new SomeArrayObject<String>();
    }

    public void someMethod()
    {
        //Does something
    }
}

public class Sub
{
    private SomeArrayObject<ObjectFromOtherClass> o; //Notice the diff?

    public Sub(String a, SomeObject b)
    {
        super(a, b);
        o = new SomeArrayObject<ObjectFromAnotherClass> o;
    }
}

快速说明一下,超类中没有“默认构造函数”,因此我不能只使用super()并根据需要填写变量。

我可以看到你的问题。 您不能修改它,因为它是私权吗? 并且可以将其设为private变量,但是在这种情况下,您可以将变量的可见性更改为protected ,以便子类可以看到它并对其进行修改。

编辑:

看到新的信息,您需要做一些其他的更改,添加一个泛型,并使该变量受保护,从而创建一个新的泛型类:

public class SuperClassGen<A>  {
    protected ArrayList<A> o;
    private String a;
    private int b;

    public SuperClassGen(String a, int b) {
        this.a = a;
        this.b = b;
        this.o = new ArrayList<A>();
    }
}

public class SuperClass extends SuperClassGen<String> {
    public SuperClass(String a, int b) {
        super(a, b);
    }
}

public class SubClass extends SuperClassGen<ObjectFromOtherClass> {
    public SubClass(String a, int b) {
        super(a, b);
    }
}

这将允许在构造函数中从子类更改类型,而无需

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM