当前位置: 首页 > 知识库问答 >
问题:

Java编译器抛出抽象方法而不是越过所有抽象方法

凌成天
2023-03-14

所以我试图扩展一个employee抽象类。代码如下:

abstract class Employee
{
    String firstName;
    String lastName;
    
    Employee(String firstName,String lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    
    public String getName()
    {
        String fullName = this.firstName + " " + this.lastName;
        return fullName;
    }
    
    //abstract method 
    public abstract int getFeedback();
}

class SalesEmployee extends Employee
{
    double revenue;
    
    SalesEmployee(String firstName,String lastName,double revenue)
    {
        super(firstName,lastName);
        this.revenue = revenue;
    }
    
    public int getFeedback(double revenue)
    {
        if(revenue>55)
        {
            return 7;
        }
        else if (revenue>50)
        {
            return 6;
        }
        else if (revenue>40)
        {
            return 5;
        }
        else if (revenue>30)
        {
            return 3;
        }
        else if (revenue>20)
        {
            return 2;
        }
        else
        {
            return 1;
        }
        
    }
}

class CoderEmployee extends Employee
{
    int projects;
    
    CoderEmployee(String firstName,String lastName,int projects)
    {
        super(firstName,lastName);
        this.projects = projects;
    }
    
    public int getFeedback(int projects)
    {
        if(projects>20)
        {
            return 5;
        }
        else if (projects>15)
        {
            return 4;
        }
        else if (projects>10)
        {
            return 3;
        }
        else if (projects>5)
        {
            return 2;
        }
        
        else
        {
            return 1;
        }
        
    }
}


public class Main{
    public static void main(String[] args)
    {
    }
}

现在,正如您所看到的,我已经在两个子类中遍历了抽象方法getFeedback。但我得到了这个错误:

/tmp/eIRGYxws7Y/CoderEmployee.java:25: error: SalesEmployee is not abstract and does not override abstract method getFeedback() in Employee
class SalesEmployee extends Employee
^
/tmp/eIRGYxws7Y/CoderEmployee.java:66: error: CoderEmployee is not abstract and does not override abstract method getFeedback() in Employee
class CoderEmployee extends Employee

那么问题是什么呢?为什么在两个子类中都编写了getFeedback方法,却引发了这个错误

共有1个答案

陆寒
2023-03-14

抽象的getfeedback()方法没有参数,而您的实现有一个参数。因此,它不是重写的,而是重载的。您还必须将参数添加到抽象定义中。此外,您的实现中的参数类型是不一致的,您必须使它们相互匹配或可分配。

java prettyprint-override">// in Employee
public abstract int getFeedback(double revenue);

// In SalesEmployee
public int getFeedback(double revenue) {
    ...
}

// In CoderEmployee
public int getFeedback(double projects) {
    ...
}
 类似资料:
  • 为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),

  • 大家好,我有这个主课堂 错误:(42,8)错误:Home不是抽象的,并且不会覆盖OnFragmentInteractionListener中的onFragmentInteract(String)抽象方法 我创建了一个导航抽屉,并希望有一个新的片段来显示另一个家庭活动的内容。 Android Studio告诉我做个家。类抽象或实现抽象方法。 里面: 我那样做了,但是什么也没有改变。我不能让home类

  • 本文向大家介绍抽象类必须要有抽象方法吗?相关面试题,主要包含被问及抽象类必须要有抽象方法吗?时的应答技巧和注意事项,需要的朋友参考一下 不需要,抽象类不一定非要有抽象方法;但是包含一个抽象方法的类一定是抽象类。 示例代码: 上面代码,抽象类并没有抽象方法但完全可以正常运行。

  • 问题内容: 因此,我一直在为编程类编写抽象作业,但遇到了问题。我现在的目标是能够使用抽象,然后能够使用矩形和椭圆形绘制一个简单的城市,例如矩形建筑物或灯柱上的椭圆形灯。 我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的,并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。该错误显示在类Shape下方的“矩形扩展

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?