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()
私有或受保护。
我经历过Interfaces in Java: cannot make implemented methods protected or private 。并没有直接的方法来做到这一点
因此,我不打算使用接口,而是计划使用抽象类
使用抽象类 Shape.java
public abstract class Shape {
abstract public String draw();
abstract protected void calcSomething();
}
Square.java
实施Shape
抽象类
public class Square extends Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
protected void calcSomething() {
}
}
我应该选择哪一个。我应该使用界面并使calcSomething()
公开,还是应该使用抽象类并使calcSomething()
保护
答案 0 :(得分:2)
引用The Java™ Tutorials - What Is an Interface?:
实现一个接口允许一个类对它承诺提供的行为变得更加正式。接口在类和外部世界之间形成合同。
为了让外界访问这些方法,它们必须是公开的。
如果您不希望该方法是公共的,即可以从外部世界调用,则它不属于该接口。
如果您希望calcSomething()
中的其他代码可以调用Shape
,那么......哎呀,Shape
中没有其他代码。这是一个界面
好的,如果您希望calcSomething()
可以从Square
中的其他代码调用,则需要它是抽象(或存根)方法。这就是template method pattern的工作原理。