Question:
I have a class that extends one class and implements an interface.The interface requires a getName() method.At the same time the class I am extending has a getName() functionthat has been deprecated. Can I override this collision and provide agetName() method to satisfty the interface?
Answer:
You may override the method and also have the method implement theinterface. However, the Java compiler will complain about overridinga deprecated method, producing a deprecation warning. You cancompile the following code samples to test this out.
Be sure tocompile the classes in the deprecation package first and to place thesource files somewhere outside of the compiler’s classpath when youcompile Deprecation.java. If you don’t do this, the compiler will findthe source files during compilation and not emit any warnings. TheJDK compiler only appears to recognize deprecation in a class file.
import deprecation.*;public class Deprecation { class DerivesAndImplements extends Deprecated implements GetName { public String getName() { return "DerivesAndImplements"; } } public void test() { Deprecated deprecated = new Deprecated(); Derives derives = new Derives(); DerivesAndImplements dai = new DerivesAndImplements(); GetName getname = dai; System.out.println(deprecated.getName()); System.out.println(derives.getName()); System.out.println(dai.getName()); System.out.println(getname.getName()); } public static void main(String[] args) { (new Deprecation()).test(); }}package deprecation;public class Deprecated { /** * @deprecated This method is deprecated. */ public String getName() { return "Deprecated"; }}package deprecation;public class Derives extends Deprecated { public String getName() { return "Derives"; }}package deprecation;public interface GetName { public String getName();}