Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将实用程序方法移动到抽象超类中是合法的还是错误的做法?_Java_Styles_Code Cleanup - Fatal编程技术网

Java 将实用程序方法移动到抽象超类中是合法的还是错误的做法?

Java 将实用程序方法移动到抽象超类中是合法的还是错误的做法?,java,styles,code-cleanup,Java,Styles,Code Cleanup,我与它的实现有一个接口。公共接口方法使用许多私有方法进行计算: public class FooServiceImpl implements FooService { @Override public void method1() { calc1(); calc2(); ... ... } @Override public void method2() { calc1();

我与它的实现有一个接口。公共接口方法使用许多私有方法进行计算:

public class FooServiceImpl implements FooService {

    @Override
    public void method1() {
        calc1();
        calc2();
        ...
        ...
    }

    @Override
    public void method2() {
        calc1();
        calc2();
        ...
        ...
    }

    private Double calc1() {
        ...
        ...
    }

    private Double calc2() {
        ...
        ...
    }

    ...
    ...
}
为了更好地进行概述,我将公共接口方法和实用工具方法移动到一个抽象类中,从而将它们分开:

public class FooServiceImpl extends AbstractFooService implements FooService {

    @Override
    public void method1() {
        calc1();
        calc2();
        ...
        ...
    }

    @Override
    public void method2() {
        calc1();
        calc2();
        ...
        ...
    }
}


这是合法的模式还是不好的做法?

当然。好吧,我不能为它命名一个模式,但确定你把所有在派生中是重复的东西都放进父代中了。-如果每个派生都需要不同的实现,那么情况就不同了,那么接口可能更合适。此外,如果您还想从其他内容继承,请参见。请对常用方法使用受保护的修饰符。2.若您对AbstractFooService使用抽象修饰符,那个么它也可以实现FooService。这将允许您仅在FooServiceImpl中扩展AbstractFooService。只有当AbstractFooService将包含多个子类的公共方法时,这才是合理的。否则您不需要使用“abstract”。当然。好吧,我不能为它命名一个模式,但确定你把所有在派生中是重复的东西都放进父代中了。-如果每个派生都需要不同的实现,那么情况就不同了,那么接口可能更合适。此外,如果您还想从其他内容继承,请参见。请对常用方法使用受保护的修饰符。2.若您对AbstractFooService使用抽象修饰符,那个么它也可以实现FooService。这将允许您仅在FooServiceImpl中扩展AbstractFooService。只有当AbstractFooService包含多个子类的公共方法时,这才是合理的。否则,您不需要使用“abstract”。
public abstract class AbstractFooService {

    Double calc1() {
        ...
        ...
    }

    Double calc2() {
        ...
        ...
    }

    ...
    ...
}