I have a question about interface and class implementing interface.
This is my code:
interface iMyInterface {
public iMethod1();
}
public class cMyClass implements iMyInterface {
public iMethod1() {
// some code
}
protected iMethod2() {
// some code
}
}
I would like to create an instance of iMyInterface
as this :
iMyInterface i = new cMyClass();
i.iMethod1();
It's ok, but how can I call iMethod2()
from my interface instance? Is this working and safe:
((cMyClass)i).iMethod2();
Thanks for help.
Yes, that will work (if you change the declaration of cMyClass
to implement iMyInterface
) and it's safe so long as the reference really does refer to an instance of cMyClass
.
However, it's a generally bad idea. The whole point of using an interface is to be able to work with any implementation - it's to separate the abstraction from the implementation. If you're then going to require a specific implementation, you might as well make the type of i
just cMyClass
to start with.
So suppose instead of calling the cMyClass
constructor yourself, you receive a method parameter of type iMyInterface
- it's a bad idea to cast to cMyClass
at that point, as it could be a different implementation of the interface.
(On a separate note, it's a good idea to start following Java naming conventions, which state that classes and interfaces should be Pascal-cased - so ditch the c
and i
prefixes.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With