我有这样的代码:
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 的函数,而无需存储额外的引用。
关于java - 我可以让派生类从 Java 中的基类继承派生成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813519/