![](/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.