7

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

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

4

3 回答 3

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();
}
于 2012-04-12T01:05:17.643 回答
2

以下是公共、受保护和私有的区别:

修饰符

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

对于问题没有。2:是的。

于 2012-04-12T01:19:35.157 回答
1

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

于 2012-04-12T01:04:45.180 回答