1
votes

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);
    }
}
2
Can you show the two method/class definitions? This sounds like they have different return types/arguments.Thomas
Are you sure they're both public? Do they have the 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
@Thomas: I have updated the question to include class codee-mre
Your structure works fine for me, JRE 1.7.0_07, with or without the annotation, so I'm not sure what to tell you.Thomas

2 Answers

3
votes

It appears "yshavits" pointed to the exact pain point but other limitations got in the way.

My abstract method was package-private at the beginning. I changed it to a public when I encountered the error in the subclass but the error did not disappear after changing it to public.

It turns out, references in a referencing project is not updated as long as the referenced project is compiled completely and successfully. Any single error in the referenced project prevents a successful compile and that prevents the referencing project to detect updated class information of it.

My referenced project had another error. Even completely separate from classes above, it prevents a successful compile and prevents reference updates in referencing project.

Background compiler is not as smart as I hoped it seems.

0
votes

I think that your are using Java 1.5, Please go to Project/properties, Java Compiler and make sure that your are using at least java 1.6.