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



我试图在一个子类中创建一个构造函数,但我想在不改变超类功能的情况下,将其"继承"的变量之一更改为更适合该子类的变量(特别是,我试图将变量的类型从String更改为我在另一个类中创建的Object(。问题是,我不能直接更改或访问该变量,因为它在超类中是私有的,并且没有用于该变量的setter。

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

本质上,我想做的是类似这样的事情

//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);
}
}

这将允许在没有的情况下更改构造函数中子类的类型

最新更新