抽象类或使用接口的公共方法

Shape.java

public interface Shape {
    String draw();

    void calcSomething();
}

Square.java

public class Square implements Shape {
    @Override
    public String draw() {
        return "SQUARE";
    }

    @Override
    public void calcSomething() {

    }
}

当我实现一个interface ,我实现的方法必须是public

我想使draw()公共方法,但calcSomething() 私有或受保护

我已经通过了Java中的接口:不能使实现的方法受保护或私有。 并没有直接的方法来做到这一点

因此,我不打算使用接口,而是计划使用抽象类

使用抽象类的 Shape.java

public abstract class Shape {
    abstract public String draw();

    abstract protected void calcSomething();
}

实现Shape 抽象类的 Square.java

public class Square extends Shape {
    @Override
    public String draw() {
        return "SQUARE";
    }

    @Override
    protected void calcSomething() {

    }
}

我应该选择哪一个。 我应该使用接口并使calcSomething() 公开或我应该使用抽象类并使calcSomething() 受保护


引用Java™教程 - 什么是接口?

实现一个接口允许一个类对它承诺提供的行为变得更加正式。 接口形成了课堂和外部世界之间的契约。

为了让外部世界获得这些方法,他们必须是公开的。

如果您不希望该方法是公开的,即可从外部调用,那么它不属于界面。

如果您希望calcSomething()可以从Shape其他代码调用,那么...糟糕的是, Shape没有其他代码。 这是一个界面。
好吧,如果你想calcSomething()可以从Square其他代码调用,你需要它是一个抽象(或存根)方法。 例如,这是模板方法模式的工作原理。

链接地址: http://www.djcxy.com/p/27733.html

上一篇: Abstract class or public method using interface

下一篇: Change Protected Method From Abstract Class to Private In Concrete Class