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() {
    }
}
When I implement an interface, the method that I implemented must be public.
I want to make draw() public method but calcSomething() private or protected.
I've gone through Interfaces in Java: cannot make implemented methods protected or private . And there no straight way to do this
So instead of using interface I'm planning to use abstract class
Shape.java using abstract class
public abstract class Shape {
    abstract public String draw();
    abstract protected void calcSomething();
}
Square.java that implements Shape abstract class
public class Square extends Shape {
    @Override
    public String draw() {
        return "SQUARE";
    }
    @Override
    protected void calcSomething() {
    }
}
Which one should I choose. Should I use interface and make the calcSomething() public or Should I use abstract class and make the calcSomething() protected
 
     
    