Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java interfaces reduction in visibility, only NOT [duplicate]

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?

like image 218
Lucas Avatar asked Dec 09 '22 00:12

Lucas


1 Answers

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;
    }
}
like image 110
Pau Kiat Wee Avatar answered Feb 22 '23 21:02

Pau Kiat Wee