抽象方法的标准可见性

时间:2012-04-12 00:55:29

标签: java

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

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

3 个答案:

答案 0 :(得分:11)

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

示例:

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();
}

答案 1 :(得分:2)

以下是public,protected和private的区别:

Modifier

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

问题没有。 2:是的,是。

答案 2 :(得分:1)

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