抽象类或使用接口的公共方法
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
其他代码调用,你需要它是一个抽象(或存根)方法。 例如,这是模板方法模式的工作原理。
上一篇: Abstract class or public method using interface
下一篇: Change Protected Method From Abstract Class to Private In Concrete Class