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