![](/img/trans.png)
[英]Is it possible to Create a 'super' variable and then change it to a sub class type and be able to access the subclass methods
[英]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.