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

时间:2018-07-21 18:45:35

标签: java inheritance constructor 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()并根据需要填写变量。

1 个答案:

答案 0 :(得分:2)

我可以看到你的问题。您不能修改它,因为它是私权吗?并且可以使用| column1 | column2 | column3 | |---------|---------|---------| | user1 | ACT1 | ID1 | | user1 | ACT1 | ID1 | | user1 | ACT1 | ID1 | | user1 | ACT1 | ID1 | | user2 | ACT2 | ID2 | | user3 | ACT3 | ID3 | | user3 | ACT3 | ID3 | | user3 | ACT3 | ID3 | | user4 | ACT4 | ID4 | 变量,但是在这种情况下,您可以将变量的可见性更改为private,以便子类可以查看和修改它。

编辑:

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

protected

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