首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中继承抽象类时,是否需要再次实现所有接口方法?

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

Stack Overflow用户
提问于 2018-10-20 06:26:39
回答 3查看 932关注 0票数 2

我试图扩展一个抽象类,它实现了一个接口方法,因此在我的子类中,我试图实现接口中声明的其余方法,但子类迫使我声明所有接口方法,请帮助我修复这个问题,谢谢我在下面添加了我的代码。谢谢大四的人。

我的代码

代码语言:javascript
运行
复制
   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 {

    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-20 06:39:02

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

但看来我在你的考试课上看到了一个问题。

您的接口声明了此方法,

代码语言:javascript
运行
复制
Double salary();

在check类中实现此方法时,

代码语言:javascript
运行
复制
public double sal()

因此,这实际上并不是从接口实现方法。您需要使它与它在界面上相同。

就像这样在你的检查类中创建一个方法,

代码语言:javascript
运行
复制
public Double salary()
    {
        return 25000.00;
    }

在实现/重写超类/接口中的方法时,您应该始终使用@重写注释,以便在任何方法签名不同的情况下,它将提示您在那里出错。是的,如果在子类检查中再次声明name()方法,它将覆盖抽象class.You中的方法,在类中可以这样做,

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-10-20 06:39:16

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

除非提供默认主体,否则接口中的方法默认为- abstract

当抽象类实现接口时,接口的所有方法都继承为抽象。

现在,在您的场景中,您已经为接口的继承方法之一提供了一个主体,该方法在“抽象”类的范围内不再是抽象的。因此,如果一个类扩展了这个抽象类,那么它就不需要为上面的方法提供一个主体,因为它不再是抽象的(当然,他们可以重写它)。

您在Check子类中得到了一个错误,它是您为不继承salary()方法而定义的,而不是您已经在GetNames抽象类中定义的names()方法。

票数 0
EN

Stack Overflow用户

发布于 2018-10-20 07:13:37

您的GetNames类正在实现xxx接口,但是您只实现了name(),您必须实现工资方法。

代码语言:javascript
运行
复制
interface xxx
{
     int numbers();
     String names();
     Double salary();
}
abstract class GetNames implements xxx
{
    public String names()
    {
        return "Ravi";
    }
    public Double salary()
    {
        return null;//just return null;
    }
}
class Check extends GetNames
{
    public int numbers()
    {
        return 3;
    }
    public double sal()
    {
        return 25000.00;
    }
}

或者直接扔NotImplementedException;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52903040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档