Re: enforce override of method
Inheritence can't give you what you are looking for, but if you consider=
=
delegation, you might get the desired effect.
eg:
public class A implements I {
private final I _delegate;
protected A(I imp) {
if (imp==null) throw new NullPointerException();
_delegate=imp;
}
public void foo() {
_delegate.foo();
}
public static A createDefaultA() {
return new A(new I() {
public void foo() {
// default foo method
});
}
}
On Mon, 25 Jun 2007 20:12:57 -0400, Mize-ze <zahy.bnaya@gmail.com> wrote=
:
On Jun 26, 2:39 am, "Matt Humphrey" <m...@ivizNOSPAM.com> wrote:
"Mize-ze" <zahy.bn...@gmail.com> wrote in message
news:1182806954.734906.69320@n2g2000hse.googlegroups.com...
| Hi,
| Let's say I have a class A which implements interface I, which has =
a
| method foo() in it,
| I want (and I must) implement I.foo() method in class A.
|
| Now, I have a Class B which extends A and therefore inherits it's
| foo() method. however,
| I don't want class B to use A's implementation of foo() but instead=
| implement its own .
| I can easily just override the method by implementing the foo() met=
hod
| in B.
|
| BUT what if I want to enforce the user to implement foo()?
| Anyway of doing this?
| It's like having class A as abstract class( foo() as abstract). but=
it
| isn't...
If B must extend A and foo must be accessible outside of the package,=
=
there
is no way to enforce that B.foo() not override or use A.foo(). If th=
ere
were a way to enforce it, B could always write a method fooAlt () whi=
ch
calls foo() (because foo is accessible) and then let B.foo () =
"override" by
calling fooAlt().
If foo can be restricted to the package, A can give it default =
protection.
n that case B would then not have any access to it, but no code outsi=
de =
of
the package could use A.foo either. B.foo would be available, but it=
=
would
be different from A.foo and would not override it.
Matt Humphrey m...@ivizNOSPAM.comhttp://www.iviz.com/
Hi Matt,
I'm afraid I wasn't that clear,
I want to have a situation where if one of my developers wants to
extend A he HAS to override
foo() and not use A's implementation (although he can trick the system=
by calling it at fooAlt, that's fine by me...)
Bottom line:
I want he's class not to compile until he implements foo().