在继承Java中的抽象类时,我是否需要再次实现所有接口方法?

时间:2018-10-20 06:26:40

标签: java interface abstract-class

我试图扩展一个抽象类,该抽象类实现了一种接口方法,因此在我的子类中,我试图实现接口中声明的其余方法,但是子类迫使我声明所有接口方法,请帮助我为了解决这个问题,在此先感谢我在下面添加了我的代码。预先感谢老年人。

我的代码

   interface xxx
    {
         int numbers();
         String names();
         Double salary();
    }
    abstract class GetNames implements xxx
    {
        public String names()
        {
            return "Ravi";
        }
    }
    class Check extends GetNames
//This class forcing me to implement names also
    {
        public int numbers()
        {
            return 3;
        }
        public double sal()
        {
            return 25000.00;
        }
    }

    public class AbsUsingInterface {

    }

3 个答案:

答案 0 :(得分:1)

您只需要从Interface实现尚未在抽象类中实现的方法,抽象类是您尝试实现方法的类的超类。

但是看起来我在您的Check班上遇到了一个问题。

您的接口声明了此方法,

Double salary();

与在check类中一样,您正在实现此方法,

public double sal()

因此,这实际上并没有从接口实现方法。您需要使其与界面中的相同。

只需在Check类中使用make方法,

public Double salary()
    {
        return 25000.00;
    }

在从超类/接口实现/重写方法时,应始终使用@Override批注,以防万一您的方法签名不同,它会在那里提示您输入错误。是的,如果您在Check的子类中再次声明names()方法,它将覆盖抽象类中的那个。您可以在您的类中执行类似的操作

abstract class GetNames implements xxx
{
    @Override
    public String names()
    {
        return "Ravi";
    }
}

class Check extends GetNames
{
    @Override
    public int numbers()
    {
        return 3;
    }
    public double sal()
    {
        return 25000.00;
    }
    @Override
    public Double salary() {
        return sal();
    }

    @Override
    public String names() { // this overrides names() method in GetNames class
        return "Check";
    }


}

答案 1 :(得分:0)

扩展abstract类的具体类必须为超类中的所有抽象方法提供主体。

默认情况下,接口中的方法为abstract,除非您提供默认正文。

当抽象类实现一个接口时,该接口的所有这些方法都照原样继承了

在您的方案中,为接口的一个继承方法提供了主体,该方法在'Abstract'类的范围内不再是抽象的。因此,如果一个类扩展了这个抽象类,则它不必为上述方法提供主体,因为它不再是抽象的(它们当然可以覆盖它)。

在您定义的Check子类中出现错误,原因是不继承salary()抽象类中已经定义的names()方法,而不是GetNames方法中的错误< / p>

答案 2 :(得分:0)

您的GetNames类正在实现xxx接口,但是您仅正在实现names() 您必须执行工资法。

doc

或者只是抛出NotImplementedException;