I have this public abstract class MyClass with abstract method abstract public void myMethod() in my Android library project.
I am trying to build a concrete implementation of this class in another project, which is an application project and references the library project. The method implementation in the subclass is marked with "@Override" and Eclipse gives me the following error:
The method myMethod() of type MySubClass must override or implement a supertype method
I remove "@Override" and error becomes a warning:
The method MySubClass.myMethod() does not override the inherited method from MyClass since it is private to a different package
What does this mean? Yes, these classes are in different projects and different packages but what does this have to do with inheritance? Both methods are public.
Here is the code for the superclass:
package com.emret.myPackage;
//Some imports here
public abstract class ThingsProvider {
//Class code here
abstract public void createThings();
}
Here is the subclass:
package com.emret.myPackage.subPackage;
//Some imports here
public class SmallThingsProvider extends ThingsProvider {
//Class code here
@Override
public void createThings() {
createThing(0, R.drawable.cat, R.raw.cat);
createThing(1, R.drawable.dog, R.raw.dog);
createThing(2, R.drawable.cow, R.raw.cow);
createThing(3, R.drawable.sheep, R.raw.goat);
createThing(4, R.drawable.bicycle, R.raw.bicycle);
}
}
public
keyword? It sounds like the superclass's method is package-private, which is the default visibility if there's no keyword. E.g.,abstract void foo()
is package-private, and can only be overridden by classes in that same package. – yshavit