簡體   English   中英

我可以使派生類從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM