On Sunday, 21 May 2023 at 11:20:30 UTC, ag0aep6g wrote:
On 21.05.23 12:55, Theo wrote:
As for the other part, if I use an abstract base class, I *must* indicate when i'm overriding the base class method by explicately saying 'override'.

I wouldn't mind if implementing interface methods required `override` as well. I don't know if there is a rationale for the inconsistency.

Consistency, which can also aid in self-documenting, might look something like this:

----- using interface -----

interface Ship
{
    void setSpeed(int speed); // must 'implement'
    int getSpeed(); // must 'implement'
}

class PirateShip : Ship
{
    private(this) int speed = 0;

    public void setSpeed(int speed) : implements Ship
    {
        this.speed = speed;
    }

    public int getSpeed() : implements Ship
    {
        return speed;
    }
}

----- using base class -----
abstract base class Ship
{
    abstract void setSpeed(int speed); // must 'implement'
    abstract int getSpeed(); // must 'implement'
    void someotherMethod(); // can 'override'.
}

class PirateShip : Ship
{
    private(this) int speed = 0;

    public void setSpeed(int speed) : implements Ship
    {
        this.speed = speed;
    }

    public int getSpeed() : implements Ship
    {
        return speed;
    }

    public void someotherMethod() : overrides Ship
    {

    }
}

-----------------

Reply via email to