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
{
}
}
-----------------