Java 抽象方法的标准可见性

Java 抽象方法的标准可见性,java,Java,这似乎是一个愚蠢的问题,但我想知道创建抽象方法时的“最佳实践”。它们的可见性应该是公开的还是受保护的 即使实现抽象方法的子类将是公共的,仍然建议保持抽象方法受保护吗?我想这取决于该方法的功能。如果它是表示类(和子类)行为的东西,那么它应该是公共的。如果子类要实现的方法是内部的,并且被基类的其他方法使用(如定义算法策略),则应该对其进行保护。取决于您的用例。如果抽象方法只实现了抽象类中公共方法提供的某些更强大的功能,那么它可能应该受到保护。如果它是可以/应该从另一个类调用的独立方法,则将其公开 示

这似乎是一个愚蠢的问题,但我想知道创建抽象方法时的“最佳实践”。它们的可见性应该是公开的还是受保护的


即使实现抽象方法的子类将是公共的,仍然建议保持抽象方法受保护吗?

我想这取决于该方法的功能。如果它是表示类(和子类)行为的东西,那么它应该是公共的。如果子类要实现的方法是内部的,并且被基类的其他方法使用(如定义算法策略),则应该对其进行保护。

取决于您的用例。如果抽象方法只实现了抽象类中公共方法提供的某些更强大的功能,那么它可能应该受到保护。如果它是可以/应该从另一个类调用的独立方法,则将其公开

示例:

public abstract class Foo implements Closeable {
    public final void close() {
        // do whatever
        doClose();
    }

    protected abstract void doClose();
}

public abstract class Bar {
    public void read(byte[] b) {
        for(int x = 0; x < b.length; x++) {
            b[x] = read();
        }
    }

    public abstract int read();
}
公共抽象类Foo实现了Closeable{
公开最终作废关闭(){
//做任何事
doClose();
}
受保护的抽象void doClose();
}
公共抽象类栏{
公共无效读取(字节[]b){
对于(int x=0;x
以下是公共、受保护和私有的区别:

对于方法,如果设置为public,则可以访问项目中所有包中的所有类;如果设置为protected,则只能访问扩展抽象类的同一包或子类中的所有类。


对于第二个问题:是的,是的。

他不是这样问的。他问抽象类的最佳实践是什么,而不是公共/私有/受保护的定义。是的,他可以根据我的解释决定要选择公共还是受保护。