java - 我可以让派生类从 Java 中的基类继承派生成员吗?

标签 java class inheritance

我有这样的代码:

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/

相关文章:

database - python : How to call a class methods(parent) in another class methods(child) only by importing class files(parent to child)?

php - 如何将 mysql 函数扩展到我自己的数据库类中?

java - 为什么 Java/Scala 使用 extends/implements 关键字?

java - 两个多边形之间的重叠检查

java - 我需要根据模式替换java中的字符串

Java类型删除——为什么看字节码能看到类型?

java - 如何在类之间高效共享函数而不违反里氏替换原则

jquery - 如何使用jquery通过id访问类?

c++ - 如何访问从模板类继承的私有(private)静态类成员?

Typescript Private or protected member 'something' 无法在类型参数上访问