我有这个问题:
我正在尝试编译:
public class Agora extends CreditCardPayment {
public void run() {
CashPayment ad1 = new CashPayment(12f);
ad1.paymentDetails();
CashPayment ad2 = new CashPayment(156.4f);
ad2.paymentDetails();
int cardnum1 = 1253462136;
CreditCardPayment ad3 = new CreditCardPayment(325.99f , "Visa" , "12/1/2015" , cardnum1);
ad3.paymentDetails();
int cardnum2 = 1235623151;
CreditCardPayment ad4 = new CreditCardPayment(999.99f , "Master" , "25/6/2016" , cardnum2);
ad4.paymentDetails();
}
}
但它一直给我这个错误:
Agora.java:3:错误:类CreditCardPayment中的构造函数CreditCardPayment不能 适用于给定类型; 公共课Agora扩展了CreditCardPayment {
必需:float,String,String,int 发现:没有争论 原因:实际和正式的参数列表长度不同
这是CreditCardPayment类:
public class CreditCardPayment extends Payment{
public CreditCardPayment(float x ,String name , String exp_date , int card_num) {
super (x);
Card_name = name;
Expiration_date = exp_date;
Card_number = card_num;
}
public String paymentDetails() {
return super.paymentDetails() + "Card's name :" + Card_name + " , Expiration Date :" + Expiration_date + " , Card Number :" + Card_number ;
}
private String Card_name;
private String Expiration_date;
private int Card_number;
}
我是一名计算机科学专业的学生并且还不太了解所以请原谅我,如果这只是一个愚蠢的错误,但我找不到它。任何帮助将不胜感激!
答案 0 :(得分:1)
构建于@ clcto的注释:Java为类提供了无参数的默认构造函数,除非指定了一个或多个其他构造函数。您已为CreditCardPayment
提供了构造函数,因此此类没有no-arg构造函数。
你有不提供Agora
的构造函数,所以默认行为是假设一个无参数的构造函数,就像你写的那样
public Agora() {
super();
}
但是超类(CreditCardPayment
)没有no-arg构造函数,所以这会失败。
答案 1 :(得分:0)
出于某种原因,您要将Agora
类创建为CreditCardPayment
的子类。因为您还没有为Agora
提供构造函数,所以默认构造函数由编译器提供,它试图调用超类CreditCardPayment()
的默认构造函数。但是不存在这样的构造函数; CreditCardPayment
的唯一构造函数需要4个参数。这解释了编译器错误。
您的Agora
课似乎使用CreditCardPayment
;它本身不是CreditCardPayment
。这种关系是"使用"而不是"是"。 Agora
使用CreditCardPayment
,但Agora
不是CreditCardPayment
。
我会删除extends CreditCardPayment
类定义中的Agora
子句;它不是必需的,也不应该存在。
public class Agora {