编译错误:类中的构造函数无法应用于给定的类型。

huangapple go评论77阅读模式
英文:

Compilation error: constructor in class cannot be applied to given types

问题

以下是翻译好的内容:

尝试使用超类中的枚举创建子类对象,但当我在子类中尝试创建对象时,出现以下错误。

错误:无法将类 Payroll 中的构造函数 Payroll 应用于给定的类型;
        public PayClaim(int hours, PayLevel level){
                                                  ^
  需要:PayLevel
  找到:无参数
  原因:实际参数列表与形式参数列表的长度不同
1 错误

这是我的超类 Payroll:

public class Payroll{
    
    static double OVERTIME_RATE = 1.5;

    static int REGULAR_WEEK = 40;
    static int LEVEL_ONE_PAY = 15;
    static int LEVEL_TWO_PAY = 25;
    static int LEVEL_THREE_PAY = 40;
    
    public enum PayLevel{
        ONE, TWO, THREE
    }
    
    private PayLevel levels;
    public Payroll(PayLevel levels){
        this.levels = levels;
    }
    
    public PayLevel getPayLevel(){
        return levels;
    }
    
    public static void main (String [] args) {
        Payroll.OVERTIME_RATE = 1.75;
        Payroll.REGULAR_WEEK = 40;
        Payroll.LEVEL_ONE_PAY = 12;
        System.out.println(Payroll.calculatePay(35, Payroll.PayLevel.ONE));
    }
    
    public static double calculatePay(int noHoursWorked, PayLevel level){
    //do stuff
    }
    
}

这是我的子类 PayClaim:

public class PayClaim extends Payroll{
    
    
    int noHoursWorked;
    public Payroll.PayLevel payLevel;
    double calculatedPay = 0;
    
    public static void main (String [] args) {
        PayClaim p = new PayClaim(1, Payroll.PayLevel.ONE);
        System.out.println(p);
    }
    
    public PayClaim(int hours, PayLevel level){
        
        if(hours > 80 || hours < 1){
            throw new IllegalArgumentException();
        }
        else{
            noHoursWorked = hours;
            payLevel = level;
        }
    }
    
    public int getNoHoursWorked(){
        return noHoursWorked;
    }
    
    public PayLevel getPayLevel(){
        return payLevel;
    }
    
    public double getCalculatedPay(){
        return calculatedPay;
    }
    
    public void setCalculatedPay(double pay){
        //
    }
    
    public String toString(){
        //
    }
}

如果我遗漏了一些微不足道的东西,我深感抱歉,因为代码甚至无法编译,所以我真的很难找到出错的地方。

英文:

Im trying to create a subclass object using an enum from the super class but when I try to create the object in the subclass I get this error.

error: constructor Payroll in class Payroll cannot be applied to given types;
        public PayClaim(int hours, PayLevel level){
                                                  ^
  required: PayLevel
  found:    no arguments
  reason: actual and formal argument lists differ in length
1 error

This is my superclass Payroll

public class Payroll{
	
	
	static double OVERTIME_RATE = 1.5;

	static int REGULAR_WEEK = 40;
	static int LEVEL_ONE_PAY = 15;
	static int LEVEL_TWO_PAY = 25;
	static int LEVEL_THREE_PAY = 40;
	
	public enum PayLevel{
		ONE, TWO, THREE
	}
	
	private PayLevel levels;
	public Payroll(PayLevel levels){
		this.levels = levels;
	}
	
	public PayLevel getPayLevel(){
		return levels;
	}
	
	public static void main (String [] args) {
		Payroll.OVERTIME_RATE = 1.75;
		Payroll.REGULAR_WEEK = 40;
		Payroll.LEVEL_ONE_PAY = 12;
		System.out.println(Payroll.calculatePay(35, Payroll.PayLevel.ONE));
	}
	
	public static double calculatePay(int noHoursWorked, PayLevel level){
	//do stuff
    }
	
}

And this is my subclass PayClaim

public class PayClaim extends Payroll{
	
	
	int noHoursWorked;
	public Payroll.PayLevel payLevel;
	double calculatedPay = 0;
	
	public static void main (String [] args) {
		PayClaim p = new PayClaim(1, Payroll.PayLevel.ONE);
		System.out.println(p);
	}
	
	public PayClaim(int hours, PayLevel level){
		
		if(hours &gt; 80 || hours &lt; 1){
			throw new IllegalArgumentException();
		}
		else{
			noHoursWorked = hours;
			payLevel = level;
		}
	}
	
	public int getNoHoursWorked(){
		return noHoursWorked;
	}
	
	public PayLevel getPayLevel(){
		return payLevel;
	}
	
	public double getClaculatedPay(){
		return calculatedPay;
	}
	
	public void setCalculatedPay(double pay){
		//
	}
	
	public String toString(){
		//

}

My apologies if I missed something trivial its just that the code wont even compile so I'm really struggling to find just where I'm going wrong here.

答案1

得分: 1

我相信你要寻找的答案非常简单。如果你在子类中调用父类的构造函数,这应该可以解决编译问题。你可以通过以下更改来实现。我所做的更改在构造函数的开头,它简单地调用父类的构造函数来创建一个对象,因为它是一个子类。

public class PayClaim extends Payroll{
    
    
    int noHoursWorked;
    public Payroll.PayLevel payLevel;
    double calculatedPay = 0;
    
    public static void main (String [] args) {
        PayClaim p = new PayClaim(1, Payroll.PayLevel.ONE);
        System.out.println(p);
    }
    
    public PayClaim(int hours, PayLevel level){
    enter code here

        super(level);
        
        if(hours > 80 || hours < 1){
            throw new IllegalArgumentException();
        }
        else{
            noHoursWorked = hours;
            payLevel = level;
        }
    }
    
    public int getNoHoursWorked(){
        return noHoursWorked;
    }
    
    public PayLevel getPayLevel(){
        return payLevel;
    }
    
    public double getCalculatedPay(){
        return calculatedPay;
    }
    
    public void setCalculatedPay(double pay){
        //
    }
    
    public String toString(){
        //
    }
}
英文:

I believe the answer you are looking for is very simple. If you invoke the parent constructor to the subclass, this should resolve the compilation problems. You can do this by using the following changes. The change I made is at the beginning of the constructor, it simply calls the parents constructor to create an object, since it is a subclass.

public class PayClaim extends Payroll{
    
    
    int noHoursWorked;
    public Payroll.PayLevel payLevel;
    double calculatedPay = 0;
    
    public static void main (String [] args) {
        PayClaim p = new PayClaim(1, Payroll.PayLevel.ONE);
        System.out.println(p);
    }
    
    public PayClaim(int hours, PayLevel level){
    enter code here

        super(level);
        
        if(hours &gt; 80 || hours &lt; 1){
            throw new IllegalArgumentException();
        }
        else{
            noHoursWorked = hours;
            payLevel = level;
        }
    }
    
    public int getNoHoursWorked(){
        return noHoursWorked;
    }
    
    public PayLevel getPayLevel(){
        return payLevel;
    }
    
    public double getClaculatedPay(){
        return calculatedPay;
    }
    
    public void setCalculatedPay(double pay){
        //
    }
    
    public String toString(){
        //

}

huangapple
  • 本文由 发表于 2020年10月23日 22:34:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/64502029.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定