On Tuesday, 22 September 2020 at 10:23:08 UTC, Daniel Kozak wrote:
On Tue, Sep 22, 2020 at 11:06 AM claptrap via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote:


"Functions marked as final may not be overridden in a derived class, unless they are also private"

So final private functions can be overriden? It seems not, but the sentence is definitely confusing if not just plain wrong.

Yes they can, if you have class A in one module and class B in another
module this will work:

//a.d
class A
{
private final void overrideFun()
{
import std.stdio : writeln;
writeln("A::overrideFun");
}
}

//b.d
import a;
class B : A
{
void overrideFun()
{
import std.stdio : writeln;
writeln("B::overrideFun");
}
}

// main.d
import b;

void main(string[] args)
{
B b = new B;
b.overrideFun;
}

This is not really "overriding", it is more akin to "overloading". It is also not polymorphic i.e. this will call A::overrideFun.

A b = new B;
b.overrideFun;

Reply via email to