【问题标题】:Java: constructor and argument list errorJava:构造函数和参数列表错误
【发布时间】:2015-01-09 20:03:52
【问题描述】:

我有这个问题:

我正在尝试编译这个:

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 {

必需:浮点数、字符串、字符串、整数 发现:没有参数 原因:实际参数列表和形式参数列表的长度不同

这是 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;
  }

我是一名计算机科学专业的学生,​​还不太了解,所以如果这只是一个愚蠢的错误,但我找不到,请原谅。任何帮助将不胜感激!

【问题讨论】:

  • 尝试重新编译类。
  • 继承是is-a 关系。当您创建一个Agora 时,它还必须创建一个CreditCardPayment。由于您需要将参数传递给CreditCardPayment 构造函数,因此您需要使用super(),类似于在CreditCardPayment 中的使用方式

标签: java


【解决方案1】:

基于@clcto 的评论:Java 为类提供了一个无参数的默认构造函数除非您指定了一个或多个其他构造函数。你已经为CreditCardPayment 提供了构造函数,所以这个类没有无参数构造函数。

没有Agora 提供构造函数,因此默认行为是假定一个无参数构造函数,就像您编写的那样

public Agora() {
    super();
}

但是超类 (CreditCardPayment) 没有无参数构造函数,所以失败了。

【讨论】:

    【解决方案2】:

    出于某种原因,您将Agora 类创建为CreditCardPayment 的子类。因为您没有为Agora 提供构造函数,所以默认构造函数由编译器提供,它会尝试调用超类CreditCardPayment() 的默认构造函数。但是不存在这样的构造函数; CreditCardPayment 的唯一构造函数需要 4 个参数。这解释了编译器错误。

    您的Agora 类似乎使用CreditCardPayment;它本身不是CreditCardPayment。关系是“使用”,而不是“是”。 Agora 使用 CreditCardPayment,但 Agora 不是 CreditCardPayment

    我会删除 Agora 类定义中的 extends CreditCardPayment 子句;它不需要,也不应该存在。

    public class Agora {
    

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2012-03-25
      相关资源
      最近更新 更多