private method in interface
Jonathan M Davis
jmdavisProg at gmx.com
Fri Jun 3 20:54:28 PDT 2011
On 2011-06-03 19:44, Michael Shulman wrote:
> On Fri, Jun 3, 2011 at 3:07 PM, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> > I'd suggest opening a bug report.
>
> Okay, will do.
>
> > Regardless, I would have hoped that you'd get an error at compile
> > time about overriding a non-virtual function if package is
> > non-virtual
>
> It appears that overriding a non-virtual, non-abstract method (private
> or package) just hides the base-class version when the reference is of
> derived type, exactly as happens in C++ for non-virtual methods. E.g.
>
> class A {
> private void dostuff() { writeln ("In A.dostuff"); }
> }
>
> class B : A {
> private void dostuff() { writeln ("In B.dostuff"); }
> }
>
> void main () {
> B y = new B();
> A x = y;
> y.dostuff();
> x.dostuff();
> }
>
> prints
>
> In B.dostuff
> In A.dostuff
>
> I would have kind of hoped for a compiler error too, given that C++
> programmers generally seem to feel that overriding non-virtual methods
> in this way is a bad idea.
Try to compile with -w. My guess is that you will get a compiler error. But
yes, it really should give an error regardless.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list