質問

Possible Duplicate:
Reduce visibility when implementing interface in Java

I must be missing something obvious, but i am getting:

Cannot reduce the visibility of the inherited method

And I don't see how. This is my interface:

interface QueryBuilderPart {
    StringBuilder toStringBuilder();
}

And this is my implementation:

public class Stupid implements QueryBuilderPart {
    @Override
    StringBuilder toStringBuilder() {
        return null;
    }
}

Both the class and the implementation are in the same package. Any Ideas?

役に立ちましたか?

解決

By default interface's method is public, but you reduce it to default visibility, which is package level visibility.

So the following two block of code are the same:

interface QueryBuilderPart {
    StringBuilder toStringBuilder();
}

interface QueryBuilderPart {
    public abstract StringBuilder toStringBuilder();
}

Note that interface's method is abstract as well

So you should do as following:

public class Stupid implements QueryBuilderPart {
    @Override
    public StringBuilder toStringBuilder() {
        return null;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top