繁体   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