繁体   English   中英

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

[英]Do i need to implement all the methods of interface again while inheriting abstract class in Java?

我试图扩展一个抽象类,它实现了一个接口方法,所以在我的子类中,我试图实现接口中声明的其余方法,但子类强迫我声明接口的所有方法,请帮我解决这个问题,在此先感谢我在下面添加了我的代码。 非常感谢前辈。

我的代码

   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 {

    }

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

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

你的接口声明了这个方法,

Double salary();

在检查类中,您正在实施此方法,

public double sal()

所以这真的没有从接口实现一个方法。 您需要使其与界面中的相同。

只需像这样在您的 Check 类中创建方法,

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";
    }


}

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

接口中的方法默认是abstract除非您提供默认主体。

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

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

您在Check子类中收到错误,该子类已定义为不继承salary()方法,而不是您已在GetNames抽象类中定义的names()方法

你的 GetNames 类正在实现 xxx 接口,但你只实现了 names() 你必须实现salary 方法。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM