Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"The type B cannot be a superinterface of C; a superinterface must be an interface" error

Tags:

java

Let's assume I got this interface A:

interface A
{
    void doThis();
    String doThat();
}

So, I want some abstracts classes to implement the method doThis() but not the doThat() one:

abstract class B implements A
{
    public void doThis()
    {
        System.out.println("do this and then "+ doThat());
    }

}

abstract class B2 implements A
{
    public void doThis()
    {
        System.out.println(doThat() + "and then do this");
    }
}

There error comes when you finally decide to implement de doThat method in a regular class:

public class C implements B
{
    public String doThat()
    {
        return "do that";
    }
}

This class leads me to the error aforementioned:

"The type B cannot be a superinterface of C; a superinterface must be an interface"

Anyone could now if this hierarchy of classes is valid or should I do other way round?

like image 458
Painy James Avatar asked May 03 '12 16:05

Painy James


2 Answers

You must use extends

public class C extends B

Its important to understand the difference between the implements and extends Keywords. So, I recommend you start reading at this question: Implements vs extends: When to use? What's the difference? and the answers there.

like image 198
Angelo Fuchs Avatar answered Oct 09 '22 20:10

Angelo Fuchs


Since B is a class, the correct syntax is to use extends:

public class C extends B {
like image 4
NPE Avatar answered Oct 09 '22 19:10

NPE