static class
Jonathan M Davis
jmdavisProg at gmx.com
Thu Feb 21 14:43:30 PST 2013
On Thursday, February 21, 2013 19:52:39 Michael wrote:
> > I'm sure you knew that and it's just a wording thing :)
> >
> > Fun fact: in Java, it's an error to combine 'final' and
> > 'abstract'.
>
> Yes.
> As I understand, in D the "abstract" keyword is some alternative
> to @disable in that case.
More like D just doesn't care about mixing abstract and final. They're
perfectly compatible on a technical level. abstract means that you can't
instantiate it, because some of the function's have been declared but not
defined, whereas final means that you can't derive from it (if it's a class), or
you can't override it (if it's a function). Those attributes aren't in and of
themselves contradictory. They just result in a fairly useless object (aside
from whatever static functions you throw on it, in which case, you're
basically making a namespace, though it still incurs some overhead, since the
class definition still exists). Apparently Java gives you an error if you mix
abstract and final, but that's only because it checks for that. D doesn't
bother to check, so you get the natural consequence of mixing them. I'm quite
sure that the fact that it works that way is an accident. It was never
intentially made to be allowed or disallowed. It's just allowed, because
there's nothing intrinsic about either of the attributes which makes it
illegal, and no effort was made to do prevent it (it probably didn't even occur
to Walter that anyone would do it). I'd expect it to continue to work though,
since it doesn't really harm anything, and it would break code if it were
disallowed.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list