隐式调用所有继承的方法 类

Implicitly call method on all inherited classes

在所有继承的 class 上调用方法的最佳 java 编程实践是什么。考虑这个伪代码:

class TopLevel extends (SecondLevel extends Base)  

如果所有这些class都有方法'serializeToString',那么如何在整个继承结构中调用这个方法呢?这个要求的原因是每个 class 都有自己需要序列化的变量。
另外,还有一个要求:
class 'TopLevel' 和 'SecondLevel' 都 不是 抽象,并且需要成为序列化其整个继承的入口点。
例如,

SecondLevel.serializeToString()

将需要调用 'Base' 上的方法及其本身

并且:

TopLevel.serializeToString()

需要在 'SecondLevel' 和 'Base' 上调用该方法。

目前,我在 base 中有 serializeToString 方法,然后在整个继承上调用一个方法 'addSerialization'(每个实现都必须调用 super 来传播调用)
虽然这可行,但在我的代码中似乎很混乱,有两种方法可以实现一个(简单的?)事情。
实现这一目标的最佳方法是什么?

在继承结构调用 super 中的每个 class 中相同的重写方法会给你一个指向基础 class 的调用链,每个调用 superclass 覆盖方法。

如果你不需要传递额外的参数并且return类型符合你的逻辑,你可以在每个class中调用super.serializeToString()来调用superclass实施。

class TopLevel {
    @Override public String serializeToString() {
        return super.serializeToString() // calls SecondLevel implementation 
                + ", topLevelAttribute: 1";
    }
}

class SecondLevel {
    @Override public String serializeToString() {
        return super.serializeToString() // calls Base implementation 
                + ", secondLevelAttribute: 2";
    }
}

// and so on ...

现在,如果上述解决方案不符合您的逻辑,您将无法避免创建另一个从 superclass 调用的方法。

class Base {
    public String serializeToString() {
        StringBuilder sb = new StringBuilder();
        appendSerializedTo(sb);
        return sb.toString();
    }

    // can be abstract if there's no implementation here
    protected void appendSerializedTo(StringBuilder sb) {
        sb.append("baseAttribute: 3");
    }
}

class SecondLevel {
    @Override protected void appendSerializedTo(StringBuilder sb) {
        super.appendSerializedTo(sb); // calls Base implementation
        sb.append("secondLevelAttribute: 2");
    }
}

// and so on...