![](/img/trans.png)
[英]How can I alter the signature of a member function for a derived class in Java
[英]Can I make a derived class inherit a derived member from its base class in Java?
我的代码看起来像这样:
public class A
{
public void doStuff()
{
System.out.print("Stuff successfully done");
}
}
public class B extends A
{
public void doStuff()
{
System.out.print("Stuff successfully done, but in a different way");
}
public void doMoreStuff()
{
System.out.print("More advanced stuff successully done");
}
}
public class AWrapper
{
public A member;
public AWrapper(A member)
{
this.member = member;
}
public void doStuffWithMember()
{
a.doStuff();
}
}
public class BWrapper extends AWrapper
{
public B member;
public BWrapper(B member)
{
super(member); //Pointer to member stored in two places:
this.member = member; //Not great if one changes, but the other does not
}
public void doStuffWithMember()
{
member.doMoreStuff();
}
}
但是,此代码存在问题。 我在两个地方存储对该成员的引用,但如果一个更改而另一个没有,则可能会有问题。 我知道在Java中,一个继承的方法可以将其返回类型(可能是参数,但我不确定)缩小到派生类。 田野是一样的吗?
使用泛型可以更好地完成此任务。
public class AWrapper<T extends A>
{
public T member;
public AWrapper(T member)
{
this.member = member;
}
public void doStuffWithMember()
{
a.doStuff();
}
}
public class BWrapper extends Wrapper<B>
{
public BWrapper(B member)
{
super(member);
}
public void doStuffWithMember()
{
member.doMoreStuff();
}
}
子类包装器指定B类型的事实允许您在BWrapper中访问B的函数,而无需存储其他引用。
在您的BWrapper
类中,您必须删除public B member;
。 在方法中, doMoreStuffWithMember()
将行替换为:
((B) member).doMoreStuff();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.